显示数据表格列.在与数据表进行数据绑定后,Count总是0

本文关键字:数据表 数据绑定 总是 Count 表格 数据 显示 | 更新日期: 2023-09-27 17:52:37

我正在尝试有条件地显示/隐藏GridView列。

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

后来,在一个帖子回来,我正在检查条件,并希望显示/隐藏GridView的几个列,但列。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
}

不确定代码有什么问题

显示数据表格列.在与数据表进行数据绑定后,Count总是0

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

从MSDN

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

在您的例子中,您没有显式声明您的列。你可以在Click方法内外得到这样的列数如果GridView至少包含一行

cell Count in a Row = Columns Count.

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

或者你可以像@TimSchmelter评论的那样从Click方法中的DataTable中获取计数:

int temp = aDT.Columns.Count

GridView.Columns返回一个DataControlFieldCollection

From it's comments -section:

如果您正在使用GridViewDetailsView控件,则自动创建的DataControlField对象(例如,当 AutoGenerateColumns 属性为true时,不存储在可公开访问的字段集合。您只能访问和操作非自动的DataControlField对象生成。

摘自GridView.Columns备注部分:

显式声明的列字段可以与自动生成的列字段。当两者都被显式使用时首先呈现声明的列字段,然后是自动生成的列字段。自动生成列字段不能添加到Columns集合

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

如果你需要列数,你应该使用DataSourceDataTable有一个Columns属性,即使表不包含行也会初始化:

int temp = aDT.Columns.Count;   

在ASPX页面更改这些:

  1. 设置autogeneratcolumns ="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