C# GridView列。使用datatable进行数据绑定后,计数始终为0
我正在尝试有条件地显示/隐藏GridView列 我正在创建一个动态数据表,然后将其绑定到GridView 稍后,在回帖中,我正在检查条件,并希望显示/隐藏GridView的几列,但Column.Count始终为0 我的代码如下- ASPX页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 从
<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页面中更改这些内容:
标签如下:
在.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>