当前位置:  开发笔记 > 后端 > 正文

如何使用自动生成的列隐藏ASP.NET GridView中的列?

如何解决《如何使用自动生成的列隐藏ASP.NETGridView中的列?》经验,为你挑选了4个好方法。

即使是SqlDataSource1.DataBind(),GridView1.Columns.Count也始终为零;

但网格还可以

我可以

for (int i = 0; i < GridView1.HeaderRow.Cells.Count;i++)

我在这里重命名请求标题但是

GridView1.Columns[i].Visible = false;

由于GridView1.Columns.Count为0,我无法使用它.

那么我怎么能隐藏它们呢?



1> Jan Jongboom..:

尝试将e.Row.Cells[0].Visible = false;内部RowCreated事件放入网格中.

protected void bla_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[0].Visible = false; // hides the first column
}

这样它就会自动隐藏整个列.

您无法访问grid.Columns[i]gridview的DataBound事件中的生成列.


这听起来不是一个好主意.每次GridView渲染时,都会多次调用RowCreated.

2> Steve Hibber..:

仅当AutoGenerateColumns = false时才会填充Columns集合,并且您自己手动生成列.

一个很好的解决方法是在设置DataSource属性并调用DataBind()之前自己动态填充Columns集合.

我有一个函数,根据我想要显示的DataTable的内容手动添加列.一旦我完成了(然后设置DataSource并调用了DataBind(),我可以使用Columns集合并且Count值是正确的,并且我可以按照我最初的想法打开和关闭列可见性.

static void AddColumnsToGridView(GridView gv, DataTable table)
{
    foreach (DataColumn column in table.Columns)
    {
        BoundField field = new BoundField();
        field.DataField = column.ColumnName;
        field.HeaderText = column.ColumnName;
        gv.Columns.Add(field);
    }
}



3> Eilon..:

注意:此解决方案仅在您的GridView列提前知道时才有效.

听起来你正在使用GridViewwith AutoGenerateColumns=true,这是默认设置.我建议AutoGenerateColumns=false手动设置和添加列:


    
        
        
        
    

并且只包含BoundField要显示的每个字段的a .这将为您提供数据显示方式的最大灵活性.



4> 小智..:

我遇到了同样的问题 - 需要我的GridView控件的AutogenerateColumns为'true',因为它被SQL数据源绑定,因此我需要隐藏一些不能在GridView控件中显示的列.

实现这一目标的方法是在GridView的'_RowDataBound'事件中添加一些代码,例如这个(让我们假设您的GridView的ID是''MyGridView'):

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[].Visible = false;
    }
}

那就行了就好了;-)


4 2
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有