以编程方式将CheckBoxes的TemplateColumn添加到DataGrid

时间:2010-07-19 11:52:42

标签: c# asp.net datagrid

在我的代码隐藏程序中,我正在尝试使用autoGenerateColumns = true创建一个DataGrid:

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

我还需要向此Grid添加另一列(可能是TemplateColumn)CheckBoxes。 你知道怎么做吗?

我试过了:

               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 个答案:

答案 0 :(得分:2)

如果此附加列始终存在,是否有理由不能在设计视图中将其添加到网格而不是代码?或者仅在某些条件下显示?

如果没有,您可以在设计视图中指定附加列,并让autoGenerateColumns在运行时添加其余列。

答案 1 :(得分:1)

您需要将复选框添加到模板容器中,而不是转发给它。

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

答案 2 :(得分:0)

您是否必须在代码隐藏中创建它?如果是,请检查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>