【发布时间】:2012-01-08 13:52:45
【问题描述】:
我正在创建一个自定义服务器控件。这是相关的自定义控件:
public class ManagementUserControl : UserControl
{
GridView _grv;
public ManagementUserControl()
{
_grv = new GridView();
}
/// <summary>
/// binds the grid to controls.
/// </summary>
public override void DataBind()
{
_grv.DataBind();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
{
//add controls only when is not postback
InitializeGrid();
}
}
void InitializeGrid()
{
this.Controls.Add(_grv);
}
[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
public object DataSource
{
get { return _grv.DataSource; }
set { _grv.DataSource = value; }
}
}
我在 Default.aspx 后面的代码中添加数据源对象,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<string> lst = new List<string>();
lst.Add("test1");
lst.Add("test2");
lst.Add("test3");
ucManagement.DataSource = lst;
ucManagement.DataBind();
}
}
首先,它工作正常,但是当我回发页面时,控件消失了。所以我检查了 Load 事件中的 Conrols 集合,发现它是空的。更糟糕的是,grid.DataSource 在回发时为空!! 为什么不维护gridview的视图状态并且回发时数据源值丢失?顺便说一句,页面或 web.config 文件中的任何地方都没有关闭视图状态。
【问题讨论】:
标签: c# asp.net .net custom-controls