Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# CheckedChanged事件未在Gridview中触发_C#_Asp.net_Gridview_Dynamic - Fatal编程技术网

C# CheckedChanged事件未在Gridview中触发

C# CheckedChanged事件未在Gridview中触发,c#,asp.net,gridview,dynamic,C#,Asp.net,Gridview,Dynamic,我有一个gridview,其中我手动为复选框生成了一列作为标题模板,如下所示 <asp:GridView ID="gvDB" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" OnRowDataBound="gvDB_RowDataBound" <asp:TemplateField> <HeaderTemplate> <asp:CheckBox ID="chkSelectHeader" A

我有一个gridview,其中我手动为复选框生成了一列作为
标题模板
,如下所示

<asp:GridView ID="gvDB" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" OnRowDataBound="gvDB_RowDataBound" <asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkSelectHeader" AutoPostBack="true" OnCheckedChanged="chkSelectHeader_CheckedChanged" runat="server"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" AutoPostBack="true" runat="server" OnCheckedChanged="chkSelect_CheckedChanged1" />
</ItemTemplate>
</asp:TemplateField>
 </Columns>
</asp:GridView>
它们按预期绑定到列。但my
chkSelectHeader\u CheckedChanged
chkSelect\u CheckedChanged1
事件未触发

页面加载

protected void Page_Load(object sender, EventArgs e)
 {
    if (!Page.IsPostBack)
    {
      AddTemplatesToGrid();
    }
    BindDataToGridView();
 }




 public void AddTemplatesToGrid()
 {
    DataTable dt = new DataTable();
    foreach (Employees emp in EmployeesList)
    {
    TemplateField tfield = new TemplateField();
    tfield.HeaderText = emp.Name;
    gvDataEntry.Columns.Add(tfield);
    }
 }

在每次回发时调用
BindDataToGridView
,这将丢弃事件

 protected void Page_Load(object sender, EventArgs e)
 {
    if (!Page.IsPostBack)
    {
      AddTemplatesToGrid();
    }
    BindDataToGridView();
 }

中包括
BindDataToGridView()
!Page.IsPostBack
-检查。

不要在
行数据绑定中添加控件。必须在每次回发时创建动态创建的控件,但只有在网格获得数据绑定时才会触发
RowDataBound
。为此,请使用
RowCreated
。我已在
RowCreated
上完成了此操作,但事件并未触发@TimSchmeltermaybe您正在每次回发时对网格进行数据绑定(显示您的
页面加载
)。您应该只在必要时这样做。我已经用一些代码进行了更新,请参阅@timschmelter一次您还没有显示分配数据源的代码并调用
gvDataEntry.DataBind()
。好的,但是每次我选中复选框时都会调用
RowCreated
事件,如何避免它@TimSchmelter@Learner:创建的
行有什么问题?您必须在每次回发时创建所有控件,但不必在每次回发时对网格进行数据绑定。我的意思是,每个复选框选择都会触发事件,如何在选中复选框时阻止它调用复选框所以您希望在选中一次时禁用
复选框
?您可以使用
((复选框)sender).Enabled=false
我不希望为每个
chkSelectHeader\u CheckedChanged
事件触发创建的
 protected void Page_Load(object sender, EventArgs e)
 {
    if (!Page.IsPostBack)
    {
      AddTemplatesToGrid();
    }
    BindDataToGridView();
 }