在我的代码隐藏程序中,我正在尝试使用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
答案 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>