C# 以编程方式将复选框的TemplateColumn添加到DataGrid
在代码隐藏中的过程中,我试图创建一个带有C# 以编程方式将复选框的TemplateColumn添加到DataGrid,c#,asp.net,datagrid,C#,Asp.net,Datagrid,在代码隐藏中的过程中,我试图创建一个带有autoGenerateColumns=true的数据网格: DataGrid NewDg = new DataGrid(); NewDg.AutoGenerateColumns = true; NewDg.Width = Unit.Percentage(100.00); NewDg.DataSource = ds; NewDg.Data
autoGenerateColumns=true
的数据网格:
DataGrid NewDg = new DataGrid();
NewDg.AutoGenerateColumns = true;
NewDg.Width = Unit.Percentage(100.00);
NewDg.DataSource = ds;
NewDg.DataBind();
我还需要将另一列(TemplateColumn
maybe)复选框添加到此网格。
你知道怎么做吗
我试过:
TemplateColumn t = new TemplateColumn();
CheckBox c = new CheckBox();
t.ItemTemplate = (ITemplate)c;
NewDg.Columns.Add(t);
我得到以下异常跟踪:
System.InvalidCastException: Unable to cast object of type 'System.Web.UI.WebControls.CheckBox' to type 'System.Web.UI.ITemplate'. at Default2.DataGrid1_ItemDataBound(Object sender, DataGridItemEventArgs e) in c:\Users\saher\Documents\TreeTest\TreeDemo\Default2.aspx.cs:line 116 at System.Web.UI.WebControls.DataGrid.OnItemDataBound(DataGridItemEventArgs e) at System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem, DataGridColumn[] columns, TableRowCollection rows, PagedDataSource pagedDataSource) at System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource) at System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) at System.Web.UI.WebControls.BaseDataList.DataBind() at Default2.BindData() in c:\Users\saher\Documents\TreeTest\TreeDemo\Default2.aspx.cs:line 44
您需要将复选框添加到模板容器中,而不是强制转换到模板容器中 下面是一篇关于动态添加模板的文章:
如果此附加列始终存在,是否有原因不能将其添加到“设计”视图中的网格中,而不是添加到“代码”中?还是仅在特定条件下显示
如果没有,您可以在“设计”视图中指定附加列,并让autoGenerateColumns在运行时添加其余列。您必须在代码隐藏中创建它吗?如果是,请登记入住。否则,您可以将其声明为:
<asp:DataGrid id="MyGrid" runat="server">
<Columns>
<asp:TemplateColumn>
<HeaderTemplate><b>Check Me!</b></HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
检查我!
它是在特定条件下生成的,实际上我也在我的一个静态数据网格中实现了它。如何使用复选框进行检查?复选框已选中,哪些未选中??如果只提供一个id?那么,这取决于您希望如何/何时检查该值?如果在网格中循环,则得到的值为:foreach(MyGrid.Items中的DataGridItem){If((item.FindControl(“id_of_CheckBox”)as CheckBox)。选中){/*这里的逻辑!*/}