【发布时间】: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