我试图有条件地显示/隐藏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
}
不确定代码有什么问题
答案 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
。
来自它的评论 - 部分:
如果您使用的是
GridView
或DetailsView
控件,那么 自动创建的DataControlField
个对象(例如, 当AutoGenerateColumns
属性为true
时,未存储 可公开访问的字段集。你只能访问和 操纵非自动的DataControlField对象 生成。
来自GridView.Columns
备注部分:
明确声明的列字段可以与。结合使用 自动生成的列字段。两者都明确使用时 声明的列字段首先呈现,然后是 自动生成的列字段。 自动生成的列 字段未添加到列集合。
因此,只有声明性添加的列才能在GridView.Columns
中访问。由于您已将AutoGenerateColumns
设置为true
(默认),因此不会将其添加到Columns
集合中。
如果您需要列数,则应使用DataSource
。 DataTable
有一个Columns
property即使表中没有行也会初始化:
int temp = aDT.Columns.Count;
答案 2 :(得分:0)
在ASPX页面中更改这些内容:
<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