【问题标题】:CheckedChanged Event Not Firing In GridviewCheckedChanged 事件未在 Gridview 中触发
【发布时间】:2015-11-04 16:50:28
【问题描述】:

我有一个gridview,我在其中手动生成了一个复选框列作为HeaderTemplate,如下所示

<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>

OnRowDataBound 我正在动态生成控件并将其添加到每一行

e.Row.Cells[rowIndex].Controls.Add(control);

并且它们按预期绑定到列。但是我的 chkSelectHeader_CheckedChanged chkSelect_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);
    }
 }

【问题讨论】:

  • 不要在RowDataBound 中添加控件。必须在每次回发时创建动态创建的控件,但 RowDataBound 仅在网格获得数据绑定时才会触发。为此目的使用RowCreated
  • 我已经完成了RowCreated 但事件没有触发@TimSchmelter
  • 也许您在每次回发时都对网格进行数据绑定(显示您的 Page_Load)。只有在必要时才应该这样做。
  • 我已经更新了一些代码,参考一次@TimSchmelter
  • 您没有显示分配数据源并调用gvDataEntry.DataBind()的代码。

标签: c# asp.net gridview dynamic


【解决方案1】:

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

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

!Page.IsPostBack-check 中包含BindDataToGridView()

【讨论】:

  • 好的,但是RowCreated 每次我选中复选框时都会调用事件,如何避免它@Tim Schmelter
  • @Learner:RowCreated 有什么问题?您必须在每次回发时创建所有控件,但不必在每次回发时都对网格进行 DataBind。
  • 我的意思是说,每个复选框选择都会触发该事件,如何在选中复选框时阻止它调用
  • 所以你想在检查一次时禁用CheckBox?你可以使用((CheckBox)sender).Enabled = false;
  • 我不希望 RowCreated 为每个chkSelectHeader_CheckedChanged 事件触发
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 2012-02-28
  • 1970-01-01
相关资源
最近更新 更多