代码之家  ›  专栏  ›  技术社区  ›  Saher Ahwal

以编程方式将复选框的TemplateColumn添加到DataGrid

  •  1
  • Saher Ahwal  · 技术社区  · 14 年前

    在我的代码隐藏过程中,我试图用 autoGenerateColumns = true

                DataGrid NewDg = new DataGrid();
                NewDg.AutoGenerateColumns = true;
                NewDg.Width = Unit.Percentage(100.00);
                NewDg.DataSource = ds;
                NewDg.DataBind(); 
    

    我还需要添加另一列( TemplateColumn 可能)的复选框。 你知道怎么做吗??

    我试过:

                   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 
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Even Mien    14 年前

    您需要将复选框添加到模板容器中,而不是强制转换到模板容器中。

    下面是一篇关于动态添加模板的文章:
    http://msdn.microsoft.com/en-us/library/aa712868(VS.71).aspx

        2
  •  2
  •   Tanner    14 年前

    如果此附加列始终存在,是否有原因使您不能将其添加到“设计”视图中的网格中,而不是添加到“代码”中?还是只在特定条件下显示?

        3
  •  0
  •   Jocke    14 年前

    你必须在代码隐藏中创建它吗?如果是,请登记 http://msdn.microsoft.com/en-us/library/system.web.ui.templatebuilder.aspx . 否则,您可以将其声明为:

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