创建了一个服务器控件,在帮定数据的时候,每页显示10行,当翻页翻到最后一页,比如只有7条,再往前翻,出现以下错误(大致意思是控件数要保持和以前要求的在viewstate中保持的控件数一致,因为我这里控件数减少了,所以就...)。但是如果数据能被10整除,当翻页翻到最后一页,再往前翻,没有这种现象。
希望有经验的兄弟帮帮忙,先谢谢了!!!!!
例外の詳細: System.Web.HttpException: ViewState の読み込みに失敗しました。ViewState が読み込まれているコントロールのツリーは、前の要求で ViewState の保存に使用されたコントロールのツリーと一致しなければなりません。たとえば、コントロールを動的に追加する時、ポストバック 中に追加されたコントロールは、最初の要求中に追加されたコントロールの型と位置に一致しなければなりません。ソース エラー: 現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 スタック トレース:
[HttpException (0x80004005): ViewState の読み込みに失敗しました。ViewState が読み込まれているコントロールのツリーは、前の要求で ViewState の保存に使用されたコントロールのツリーと一致しなければなりません。たとえば、コントロールを動的に追加する時、ポストバック 中に追加されたコントロールは、最初の要求中に追加されたコントロールの型と位置に一致しなければなりません。]
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Page.LoadPageViewState()
System.Web.UI.Page.ProcessRequestMain()
希望有经验的兄弟帮帮忙,先谢谢了!!!!!
例外の詳細: System.Web.HttpException: ViewState の読み込みに失敗しました。ViewState が読み込まれているコントロールのツリーは、前の要求で ViewState の保存に使用されたコントロールのツリーと一致しなければなりません。たとえば、コントロールを動的に追加する時、ポストバック 中に追加されたコントロールは、最初の要求中に追加されたコントロールの型と位置に一致しなければなりません。ソース エラー: 現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 スタック トレース:
[HttpException (0x80004005): ViewState の読み込みに失敗しました。ViewState が読み込まれているコントロールのツリーは、前の要求で ViewState の保存に使用されたコントロールのツリーと一致しなければなりません。たとえば、コントロールを動的に追加する時、ポストバック 中に追加されたコントロールは、最初の要求中に追加されたコントロールの型と位置に一致しなければなりません。]
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Page.LoadPageViewState()
System.Web.UI.Page.ProcessRequestMain()
using System.Data;
using System.Data.OleDb;
using System.Web.UI.Design;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Design;
using System.ComponentModel;
using System.Collections;
namespace ServerControls
{ [ParseChildren(true),
PersistChildren(false),
Description("SuperDataGrid."),
Designer("ServerControls.SuperDataGridDesigner"),
ToolboxData("<{0}:SuperDataGrid runat=server></{0}:SuperDataGrid>")]
public class SuperDataGrid:System.Web.UI.WebControls.DataList, INamingContainer {
protected const string HTML1 = "<table><tr><td width=150>";
protected const string HTML2 = "</td><td width=50>";
protected const string HTML3 = "</td><td width=20></td><td width=50>";
protected const string HTML4 = "</td><td width=20></td><td width=150>";
protected const string HTML5 = "ページへ</td></tr></table>";
protected const string HTML_SEPERATOR = "<br/>"; private const string KEY_CURRENT_PAGE_DATA_SOURCE = "CurrentPageDataSource";
private const string KEY_ITEM_COUNT = "ItemCount";
private const string KEY_CURRENT_PAGE_INDEX = "CurrentPageIndex";
private const string KEY_PAGE_SIZE = "PageSize"; private const string IMG_PREV = "Image/parts_top_back.gif";
private const string IMG_MORE = "Image/parts_top_next.gif"; private const string KEY_PAGE = "page"; private ImageButton btnPrev;
private ImageButton btnMore ; private DropDownList ddlJumpUp;
private DropDownList ddlJumpDown; private const string KEY_MODE= "Mode";
protected string _emptyText;
private IList _OriginalDataSource;
private bool _SetEditStatus = true;
private string _DataSourceName;
private string _UserPassword;
private string _UserID;
private string _SelectSQL; [Browsable(true),
Category("Behavior"),
Description("Controls whether existing record are edited, or created.")]
public ModeType Mode
{
get
{
return (ModeType)ViewState[KEY_MODE];
}
set
{
ViewState[KEY_MODE] = value;
if ((value == ModeType.Insert) && (Visible == false))
{
Visible = true;
DataBind();
}
}
} public bool SetEditStatus
{
get
{
return _SetEditStatus;
}
set
{
_SetEditStatus = value;
}
} public object OriginalDataSource
{
set
{
try
{
_OriginalDataSource = (IList)value;
ItemCount = _OriginalDataSource.Count;
}
catch(InvalidCastException e)
{
_OriginalDataSource = null;
ItemCount = 0;
}
}
get
{
return _OriginalDataSource;
}
} public object CurrentPageDataSource
{
get
{
return ViewState[KEY_CURRENT_PAGE_DATA_SOURCE];
}
set
{
ViewState[KEY_CURRENT_PAGE_DATA_SOURCE] = value;
}
} protected int ItemCount
{
get
{
return (int)ViewState[KEY_ITEM_COUNT];
}
set
{
ViewState[KEY_ITEM_COUNT] = value;
}
} public int CurrentPageIndex
{
get
{
return (int)ViewState[KEY_CURRENT_PAGE_INDEX];
}
set
{
ViewState[KEY_CURRENT_PAGE_INDEX] = value;
}
} public int PageSize
{
get
{
return (int)ViewState[KEY_PAGE_SIZE];
}
set
{
ViewState[KEY_PAGE_SIZE] = value;
}
} protected int PageCount
{
get
{
if (ItemCount % PageSize == 0)
{
return ItemCount / PageSize;
}
else
{
return ItemCount / PageSize + 1;
}
}
} public string EmptyText
{
get
{
return (string)_emptyText;
}
set
{
_emptyText = value;
}
} protected override void OnLoad(System.EventArgs e)
{
if (! Page.IsPostBack && Visible)
{
CurrentPageIndex = 0;
}
} private void PreviousClicked(object sender,ImageClickEventArgs e)
{
OnPageIndexChanged(new DataGridPageChangedEventArgs(sender, CurrentPageIndex - 1));
} private void MoreClicked( object sender, ImageClickEventArgs e)
{
OnPageIndexChanged(new DataGridPageChangedEventArgs(sender, CurrentPageIndex + 1));
} private void ddlJump_SelectedIndexChanged(object sender ,System.EventArgs e )
{
OnPageIndexChanged(new DataGridPageChangedEventArgs(sender, ((DropDownList)sender).SelectedIndex));
}
protected override void CreateControlHierarchy(bool useDataSource)
{
btnPrev = new ImageButton();
btnPrev.ImageUrl = IMG_PREV;
btnPrev.Click +=new ImageClickEventHandler(PreviousClicked);
Controls.Add(btnPrev); btnMore = new ImageButton();
btnMore.ImageUrl = IMG_MORE;
btnMore.Click+=new ImageClickEventHandler(MoreClicked);
Controls.Add(btnMore); ddlJumpUp = new DropDownList();
ddlJumpUp.AutoPostBack = true;
int i ;
for (i = 1 ;i<=PageCount;i++)
{
ddlJumpUp.Items.Add(i.ToString());
}
ddlJumpUp.SelectedIndex = CurrentPageIndex;
ddlJumpUp.SelectedIndexChanged+=new System.EventHandler(ddlJump_SelectedIndexChanged);
Controls.Add(ddlJumpUp); base.CreateControlHierarchy(useDataSource); ddlJumpDown = new DropDownList();
ddlJumpDown.AutoPostBack = true;
for (i = 1 ;i<=PageCount;i++)
{
ddlJumpDown.Items.Add(i.ToString());
}
ddlJumpDown.SelectedIndex = CurrentPageIndex;
ddlJumpDown.SelectedIndexChanged+=new System.EventHandler(ddlJump_SelectedIndexChanged);
Controls.Add(ddlJumpDown);
} protected override void OnPreRender(System.EventArgs e)
{
if (Mode == ModeType.Update)
{
btnPrev.Enabled = CurrentPageIndex > 0;
btnMore.Enabled = CurrentPageIndex + 1 < PageCount;
ddlJumpUp.Enabled = true;
ddlJumpDown.Enabled = true;}
else if (Mode == ModeType.Insert)
{
btnPrev.Enabled = false;
btnMore.Enabled = false;
ddlJumpUp.Enabled = false;
ddlJumpDown.Enabled = false;
}
if (btnPrev.Enabled )
{
btnPrev.CssClass = "imageButtonEnabled";
}
else
{
//btnPrev.CssClass = "imageButtonDisabled";
} if (btnMore.Enabled)
{
//btnMore.CssClass = "imageButtonEnabled";
}
else
{
//btnMore.CssClass = "imageButtonDisabled";
} SetEditable(Mode != ModeType.Insert);
}
{
try
{
if ((ItemCount == 0) && (Mode != ModeType.Insert))
{
writer.Write(EmptyText);
return;
}
writer.Write(HTML1);
writer.Write("P{0}/{1}({2}件)", CurrentPageIndex + 1, PageCount, ItemCount);
writer.Write(HTML2);
btnPrev.RenderControl(writer);
writer.Write(HTML3);
btnMore.RenderControl(writer);
writer.Write(HTML4);
ddlJumpUp.RenderControl(writer);
writer.Write(HTML5);
writer.Write(HTML_SEPERATOR); DataGridItem dgItem= HeaderItem;
if (dgItem != null)
{
dgItem.Visible = (Mode == ModeType.Insert);
}
for (int I = 3 ;I<(Controls.Count - 2);I++)
{
Controls[I].RenderControl(writer);
} writer.Write(HTML1);
writer.Write("P{0}/{1}({2}件)", CurrentPageIndex + 1, PageCount, ItemCount);
writer.Write(HTML2);
btnPrev.RenderControl(writer);
writer.Write(HTML3);
btnMore.RenderControl(writer);
writer.Write(HTML4);
ddlJumpDown.RenderControl(writer);
writer.Write(HTML5);
}
catch (Exception ex)
{
//エラー処理
Console.Write(ex.Message );
}
} public void SetPage(int index)
{
OnPageIndexChanged(new DataGridPageChangedEventArgs(null, index));
} public event DataGridPageChangedEventHandler PageIndexChanged; protected virtual void OnPageIndexChanged(DataGridPageChangedEventArgs e)
{
if (PageIndexChanged != null)
{
PageIndexChanged(this, e);
}
} protected override void OnDataBinding(System.EventArgs e)
{
int start= CurrentPageIndex * PageSize;
int size = Math.Min(PageSize, ItemCount - start);
IList _page= new ArrayList();
for (int i = 0 ;i<= (size - 1);i++)
{
_page.Add(_OriginalDataSource[start + i]);
}
CurrentPageDataSource = _page;
base.DataSource = _page;
base.OnDataBinding(e);
} public DataGridItem HeaderItem
{
get
{
foreach (WebControl con in Controls)
{
if (con.GetType() == typeof(DataGridItem ))
{
DataGridItem dgItem = (DataGridItem)con;
if (dgItem.ItemType ==System.Web.UI.WebControls.ListItemType.Header)
{
return dgItem;
}
}
}
return null;
}
}
public IList ItemCollection
{
get
{
IList Items = new ArrayList();
foreach ( WebControl con in Controls )
{
if (con.GetType()==typeof(DataListItem) )
{
DataListItem dgItem = (DataListItem)con;
if ((dgItem.ItemType == ListItemType.Item) || (dgItem.ItemType == ListItemType.AlternatingItem ))
{
Items.Add(dgItem);
}
}
}
return Items;
}
} private void SetEditable(bool value)
{
if (SetEditStatus )
{
foreach (DataListItem dgItem in ItemCollection)
{
foreach(Control cont in dgItem.Controls)
{
if( cont.GetType() == typeof(TextBox) )
{
((TextBox)cont).Enabled = value;
}
else if (cont.GetType() == typeof(CheckBox) )
{
((CheckBox)cont).Enabled = value;
}
else if ( cont.GetType() == typeof(DropDownList))
{
((DropDownList)cont).Enabled = value;
}
}
}
}
} public void ResetContents()
{
base.DataSource = CurrentPageDataSource;
base.OnDataBinding(new EventArgs());
} public void ResetHeaderSubControlBackColor()
{
foreach( Control cont in HeaderItem.Controls)
{ if (cont.GetType() == typeof(TextBox))
{
//((TextBox)cont).BackColor = SystemConsts.NormalBackColor;
}
else if (cont.GetType() == typeof(DropDownList))
{
//((DropDownList)cont).BackColor = SystemConsts.NormalBackColor;
}
}
} public void ResetSubControlBackColor()
{
foreach( DataListItem dlItem in ItemCollection)
{
foreach (Control cont in dlItem.Controls)
{
if (cont.GetType() == typeof(TextBox ))
{
//((TextBox)cont).BackColor = SystemConsts.NormalBackColor;
}
else if (cont.GetType() == typeof(DropDownList))
{
//((DropDownList)cont).BackColor = SystemConsts.NormalBackColor;
}
}
}
} public SuperDataGrid()
{
//
// TODO: コンストラクタ ロジックをここに追加してください。
//
}
}
}
namespace ServerControls
{
public class SuperDataGridDesigner:System.Web.UI.Design.WebControls.DataListDesigner
{
public override string GetDesignTimeHtml()
{
return base.GetDesignTimeHtml();
//return "<b>OK</b>";
} }
}
怎么不回答,忘了,也许你看到得分问题的时候会想起来,分全给你了!