gpt4 book ai didi

c# - 以编程方式分配的 CheckChanged 事件不会触发 gridview 中的复选框控件

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:50 25 4
gpt4 key购买 nike

我有一个扩展标准 asp.net gridview 控件的自定义 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();
}

还有一点。这曾经有效,但在我开发控件时,我发现它在页面加载时多次进行数据绑定(bind)。我经历了并开始削减数据绑定(bind),以便它在页面加载期间只绑定(bind)一次。这是这样做的副作用。

我已经尝试将 CheckChanged 赋值移到 OnInit 中,也移到 OnRowCreated 中,但它仍然没有触发。

最佳答案

至于您的事件:

 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);
}

看起来您是在更改检查状态“之后”发布事件。尝试:

 CheckBox chkSelect = (CheckBox)e.Row.Cells[CheckBoxColumnIndex].FindControl(InputCheckBoxField.CheckBoxID);

if (chkSelect != null)
{
chkSelect.CheckedChanged += new EventHandler(CheckChanged_click);
Guid selectedValue = new Guid(DataKeys[e.Row.RowIndex].Value.ToString());
chkSelect.Checked = SelectedValues.Contains(selectedValue);
}

// if your done with chkSelect
chkSelect.CheckedChanged -= CheckChanged_click;

如果您的事件仍未触发,您将必须逐步查看 SelectedValue.Contains(selectedValue) 返回的内容。

关于c# - 以编程方式分配的 CheckChanged 事件不会触发 gridview 中的复选框控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com