我正在创建一个自定义服务器控件。这是相关的自定义控件:
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文件中的任何地方都没有关闭视图状态。