昨天才看了一篇关于动态控件的文章,自我感觉已经知道了点,可今天一遇到实际问题,立刻发现自己对此其实还没有摸到门槛@_@
具体情况是这样:
在一个DataGrid中增加一列CheckBox控件,可以把选中的行的ID传递给下个页面,在这列的header部分也添加一个CheckBox,控制全选和全不选。在动态添加这个控制全选的CheckBox时出了个问题,经过我反复观察,发现如果只在Page_Load中为DataGrid添加控制全选的CheckBox控件,则画面刷新后,控制全选的CheckBox不再出现,如果只在DataGrid的PreRender事件中添加控制全选的CheckBox控件,则动态添加的事件无效。
这样写2遍可以解决问题,但肯定是不正确的。^-^
具体情况是这样:
在一个DataGrid中增加一列CheckBox控件,可以把选中的行的ID传递给下个页面,在这列的header部分也添加一个CheckBox,控制全选和全不选。在动态添加这个控制全选的CheckBox时出了个问题,经过我反复观察,发现如果只在Page_Load中为DataGrid添加控制全选的CheckBox控件,则画面刷新后,控制全选的CheckBox不再出现,如果只在DataGrid的PreRender事件中添加控制全选的CheckBox控件,则动态添加的事件无效。
protected System.Web.UI.WebControls.CheckBox ckbSelect;
private void Page_Load(object sender, System.EventArgs e)
{
//初始化CheckBox
this.ckbSelect = new CheckBox();
this.ckbSelect.AutoPostBack = true;
this.ckbSelect.CheckedChanged += new EventHandler(ckbSelect_CheckedChanged);
if (!this.IsPostBack)
{
InitDataGrid();
}
//如果这里不写,CheckBox的事件无效
DataGridItem dgItem = this.dgUserList.Controls[0].Controls[1] as DataGridItem;
dgItem.Cells[0].Controls.Add(this.ckbSelect);
}
private void dgUserList_PreRender(object sender, System.EventArgs e)
{
//其他代码
//如果这里不写,刷新后CheckBox不再出现
DataGridItem dgItem = this.dgUserList.Controls[0].Controls[1] as DataGridItem;
dgItem.Cells[0].Controls.Add(this.ckbSelect);
}
private void Page_Load(object sender, System.EventArgs e)
{
//初始化CheckBox
this.ckbSelect = new CheckBox();
this.ckbSelect.AutoPostBack = true;
this.ckbSelect.CheckedChanged += new EventHandler(ckbSelect_CheckedChanged);
if (!this.IsPostBack)
{
InitDataGrid();
}
//如果这里不写,CheckBox的事件无效
DataGridItem dgItem = this.dgUserList.Controls[0].Controls[1] as DataGridItem;
dgItem.Cells[0].Controls.Add(this.ckbSelect);
}
private void dgUserList_PreRender(object sender, System.EventArgs e)
{
//其他代码
//如果这里不写,刷新后CheckBox不再出现
DataGridItem dgItem = this.dgUserList.Controls[0].Controls[1] as DataGridItem;
dgItem.Cells[0].Controls.Add(this.ckbSelect);
}
这样写2遍可以解决问题,但肯定是不正确的。^-^