Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 程序分配的CheckChanged事件不会为gridview中的复选框控件触发_C#_Events_Gridview_Checkbox - Fatal编程技术网

C# 程序分配的CheckChanged事件不会为gridview中的复选框控件触发

C# 程序分配的CheckChanged事件不会为gridview中的复选框控件触发,c#,events,gridview,checkbox,C#,Events,Gridview,Checkbox,我有一个自定义gridview控件,它扩展了标准asp.net gridview控件。gridview的第一列由动态创建的checkboxfields组成。 在OnRowDataBound事件期间,我已将事件分配给复选框的CheckChanged事件,但复选框甚至不会触发事件。我将它们的autopostback属性设置为true,它们正在进行回发,但它甚至没有尝试触发OnCheckChanged事件。 这是我的密码: gridview的OnRowDataBound事件: protected ov

我有一个自定义gridview控件,它扩展了标准asp.net gridview控件。gridview的第一列由动态创建的checkboxfields组成。 在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,但仍无法启动。

至于您的事件:

 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)
返回的内容