Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GridView列。使用datatable进行数据绑定后,计数始终为0_C#_Gridview_Datatable - Fatal编程技术网

C# GridView列。使用datatable进行数据绑定后,计数始终为0

C# GridView列。使用datatable进行数据绑定后,计数始终为0,c#,gridview,datatable,C#,Gridview,Datatable,我正在尝试有条件地显示/隐藏GridView列 我正在创建一个动态数据表,然后将其绑定到GridView 稍后,在回帖中,我正在检查条件,并希望显示/隐藏GridView的几列,但Column.Count始终为0 我的代码如下- ASPX页 <asp:GridView ID="GridView1" runat="server"> </asp:GridView> 不确定代码有什么问题如果将autogeneratedcolumns属性设置为true,则计数将始终显示为0 从

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

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

稍后,在回帖中,我正在检查条件,并希望显示/隐藏GridView的几列,但Column.Count始终为0

我的代码如下- ASPX页

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

不确定代码有什么问题

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

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

在您的例子中,您没有显式声明列。因此,如果GridView至少包含一行,则可以在Click方法的内部和外部获得如下列计数:

行中的单元格数=列数

或者,您也可以从DataTable中的Click方法中获取计数,如@commented:

int temp = aDT.Columns.Count
返回一个

在评论部分:

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

从备注部分:

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

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

如果需要列计数,则应使用
数据源
DataTable
有一个参数,即使该表不包含行,也会初始化该参数:

int temp = aDT.Columns.Count;   

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

  • 设置autogeneratecolumns=“false”
  • 添加
    标签如下:
  • 
    
    在.CS文件中:


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

    您实际想要实现的目标是什么?如果
    AutoGenerateColumns
    设置为
    true
    ,则无法访问列,但可以通过
    GridView1.Rows[0].cells[0].Text
    等访问所有单元格。正如我所说,如果要获得列的计数,唯一的方法是:
    GridView1.Rows[0].cells@FarhadJabiyev:如果他只想要列计数,他不应该计算行的单元格,因为可能根本没有行,这会导致异常。相反,他应该使用
    aDT.Columns.Count
    @TimSchmelter是的,没错。但是,我想他可能想得到Button_Click方法之外的列数。他可以检查GridView是否包含任何行。@FarhadJabiyev:但是如果网格不包含任何行,他就无法从第一行的单元格计数中获取列计数。所以支票也没用。但是
    aDT.Columns.Count
    始终有效。但是如果网格不包含行,则无法获得列计数。使用
    DataTable.Columns.Count
    属性,该属性始终有效。@TimSchmelter我已经更新了答案。谢谢你的评论。如果我将autogeneratedcolumns属性设置为false,我如何才能获得列数?有办法吗?好的,谢谢您的时间,获取列名的替代方法是什么?@user1889838:
    DT.Columns.Count
    DataTable
    的列即使不包含行也会被设置(与
    GridView.rows[0].Cells.Count相反)。编辑了我的答案。
    
    int temp = aDT.Columns.Count
    
    int temp = aDT.Columns.Count;   
    
     <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>