带有数据表的数据绑定后,GridView Column.Count始终为0

时间:2014-03-24 15:34:01

标签: c# gridview datatable

我试图有条件地显示/隐藏GridView列。

我正在创建一个动态DataTable,然后将其绑定到GridView

稍后,在帖子后面,我正在检查条件并希望显示/隐藏GridView的几列,但Column.Count总是0!

我的代码如下 - ASPX页面

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>

.CS页面

 protected void Button1_Click(object sender, EventArgs e)
{
   DataTable aDT = new DataTable()
   aDT = createDataTable();   //datatable has 21 columns

   GridView1.DataSource = aDT;
   GridView1.DataBind();

   int temp = GridView1.Columns.Count;   //always 0
}

不确定代码有什么问题

3 个答案:

答案 0 :(得分:6)

如果将autogeneratedcolumns属性设置为true,则计数将始终显示为0.

来自MSDN

  

Columns属性(集合)用于显式存储所有内容   声明在GridView控件中呈现的列字段。您   也可以使用Columns集合以编程方式管理   列字段的集合。

在您的情况下,您没有明确声明您的列。因此,如果GridView包含至少一行,则可以在Click方法内外获得列数:

  

行中的单元格数=列数。

if(GridView1.Rows.Count>0)
    int temp = GridView1.Rows[0].Cells.Count;

或者你可以从里面的DataTable获取点击方式,就像@ TimSchmelter评论那样:

int temp = aDT.Columns.Count

答案 1 :(得分:2)

GridView.Columns返回DataControlFieldCollection

来自它的评论 - 部分:

  

如果您使用的是GridViewDetailsView控件,那么   自动创建的DataControlField个对象(例如,   当 AutoGenerateColumns 属性为true时,未存储   可公开访问的字段集。你只能访问和   操纵非自动的DataControlField对象   生成。

来自GridView.Columns备注部分:

  

明确声明的列字段可以与。结合使用   自动生成的列字段。两者都明确使用时   声明的列字段首先呈现,然后是   自动生成的列字段。 自动生成的列   字段未添加到列集合

因此,只有声明性添加的列才能在GridView.Columns中访问。由于您已将AutoGenerateColumns设置为true(默认),因此不会将其添加到Columns集合中。

如果您需要列数,则应使用DataSourceDataTable有一个Columns property即使表中没有行也会初始化:

int temp = aDT.Columns.Count;   

答案 2 :(得分:0)

在ASPX页面中更改这些内容:

  1. 设置autogeneratecolumns =“ false”。
  2. 添加<columns>标记,如下所示:
 <asp:GridView ID="GridView1" autogeneratecolumns="false" runat="server">
    <columns>
        <asp:boundfield datafield="CustomerID" headertext="Customer ID"/>
        <asp:boundfield datafield="CompanyName" headertext="Company Name"/>
        <asp:boundfield datafield="Address" headertext="Address"/>
        <asp:boundfield datafield="City" headertext="City"/>
        <asp:boundfield datafield="PostalCode" headertext="Postal Code"/>
        <asp:boundfield datafield="Country" headertext="Country"/>
     </columns>
 </asp:GridView>

在.CS文件中:

int temp = GridView1.Columns.Count; //将返回6