Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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# 以编程方式将复选框的TemplateColumn添加到DataGrid_C#_Asp.net_Datagrid - Fatal编程技术网

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)。选中){/*这里的逻辑!*/}