【问题标题】:Add TemplateColumn of CheckBoxes to DataGrid programmatically以编程方式将 CheckBox 的 TemplateColumn 添加到 DataGrid
【发布时间】:2011-03-17 21:12:15
【问题描述】:

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

            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 

【问题讨论】:

    标签: c# asp.net datagrid


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 它实际上是在特定条件下生成的
      【解决方案3】:

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

      【讨论】:

      • 我也在我的一个静态数据网格中实现它。如何检查复选框是否已选中?如果只给出一个 id?
      • 嗯,这取决于您要如何/何时检查该值?如果您遍历网格,您将获得以下值: foreach (DataGridItem item in MyGrid.Items) { if ((item.FindControl("id_of_CheckBox") as CheckBox).Checked) { /*logic here!*/ } }
      猜你喜欢
      • 2016-06-17
      • 2015-12-29
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 2012-03-14
      • 1970-01-01
      相关资源
      最近更新 更多