我有一个自定义类创建一个下拉列表控件,如下所示:
public class IHGridView : System.Web.UI.WebControls.WebControl
{
private string _dataSource = "not set yet";
public string DataSource
{
get { return _dataSource; }
set { _dataSource = value; }
}
}
编辑:
protected override void OnInit(EventArgs e)
{
// VIewState is alive. When I select an option and submit, after postback it's selected value is the one I selected.
this.Controls.Add(_dropDownList);
}
或
protected override void CreateChildControls()
{
// VIewState is dead. When I select an option and submit, after postback it's selected value is the default one.
this.Controls.Add(_dropDownList);
}
所以,现在我想出了我必须在“OnInit”中添加控件的结果。 但是,这个“OnInit”是这个类写的第一个空白。 如果我想在之前使用像“DataSource”这样的属性,“OnInit”无效...... 我该怎么做?
编辑:
protected void Button1_Click(object sender, EventArgs e)
{
IHGridViewTest2.DataSource = "fired";
}
在触发aspx页面中的按钮时设置DataSource。
答案 0 :(得分:0)
为什么要添加_dropDownList两次?一旦在OnInit中就足够了,OnInit就是你应该在控件集合中添加它的地方 - 这样就可以持久化和恢复viewstate。
以访问和绑定_dropDownList为例,覆盖DataBind方法 - 此时所有属性都可供您使用。
protected override void DataBind(){
base.DataBind();
_dropDownList.DataSource = this.DataSource;
_dropDownList.DataBind();
}
这是伪代码,尚未经过测试或验证
编辑:
调用覆盖DataBind方法
protected void Button1_Click(object sender, EventArgs e)
{
IHGridViewTest2.DataSource = "fired";
IHGridViewTest2.DataBind();
}