显示数据表格列.在与数据表进行数据绑定后,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
}
不确定代码有什么问题
如果您将autogeneratedcolumns
属性设置为true
,则计数将始终显示为0。
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:
如果您正在使用
GridView
或DetailsView
控件,则自动创建的DataControlField
对象(例如,当AutoGenerateColumns
属性为true
时,不存储在可公开访问的字段集合。您只能访问和操作非自动的DataControlField对象生成。
摘自GridView.Columns
备注部分:
显式声明的列字段可以与自动生成的列字段。当两者都被显式使用时首先呈现声明的列字段,然后是自动生成的列字段。自动生成列字段不能添加到Columns集合。
所以只有以声明方式添加的列才能在GridView.Columns
中访问。由于您已将AutoGenerateColumns
设置为true
(默认),因此它们不会添加到Columns
集合中。
如果你需要列数,你应该使用DataSource
。DataTable
有一个Columns
属性,即使表不包含行也会初始化:
int temp = aDT.Columns.Count;
在ASPX页面更改这些:
- 设置autogeneratcolumns ="false"
- 添加
<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