我有一个自定义的GridView控件,它扩展了标准的ASP.NET GridView控件。GridView的第一列由动态创建的复选框字段组成。
我在OnRowDataBound事件期间为复选框的CheckChanged事件分配了一个事件,但这些复选框甚至不会激发该事件。我将它们的autopostback属性设置为true,并且它们正在进行回发,但它甚至不尝试触发oncheckChanged事件。
这是我的代码:
GridView的OnRowDataBound事件:
protected override void OnRowDataBound(GridViewRowEventArgs e)
{
base.OnRowDataBound(e);
if (e.Row.RowType == DataControlRowType.DataRow)
{
CheckBox chkSelect = (CheckBox)e.Row.Cells[CheckBoxColumnIndex].FindControl(InputCheckBoxField.CheckBoxID);
if (chkSelect != null)
{
Guid selectedValue = new Guid(DataKeys[e.Row.RowIndex].Value.ToString());
chkSelect.Checked = SelectedValues.Contains(selectedValue);
chkSelect.CheckedChanged += new EventHandler(CheckChanged_click);
}
}
}
checkChanged事件:
protected void CheckChanged_click(object sender, EventArgs e)
{
CheckBox chkSelect = (CheckBox)sender;
GridViewRow gvr = (GridViewRow)chkSelect.Parent.Parent;
Guid selectedValue = new Guid(DataKeys[gvr.RowIndex].Value.ToString());
if (chkSelect.Checked && !this.SelectedValues.Contains(selectedValue))
{
this.SelectedValues.Add(selectedValue);
}
else if (!chkSelect.Checked && this.SelectedValues.Contains(selectedValue))
{
this.SelectedValues.Remove(selectedValue);
}
DataBind();
}
还有一件事。这以前是可行的,但在开发控件时,我发现它在页面加载时多次进行数据绑定。我检查了一下并开始修剪数据绑定,以便它在页面加载期间只绑定一次。这是这样做的副作用。
我试过将checkChanged任务移动到OnInit,也移动到OnRowCreated,但它仍然不启动。