按列名显示/隐藏网格视图列

本文关键字:网格 视图 隐藏 显示 | 更新日期: 2023-09-27 18:20:24

我正在Visual Studio 2012中使用C#创建一个web项目,该项目从数据库中获取数据并显示在网格视图中。数据库中有很多列,它显示在网格视图中。我想为用户提供一个选项,使用复选框消除不需要的列,选中后,单击按钮,它必须更新。

我发现了如何按列名称隐藏列。我需要了解如何使用列名显示它。

if (CheckBox3.Checked)
{
    dt.Columns.Remove("Site_name");
    GridView1.DataSource = dt;
    GridView1.DataBind();
}
else
{
    dt.Columns.Show("Site_name"); //I want a code to display, using column name.
}

按列名显示/隐藏网格视图列

我发现了一种非常简单的方法,通过单击按钮上的复选框来显示和隐藏特定的列。

 if (CheckBox3.Checked == false)
 {
    dt.Columns.Remove("Site_name");
    GridView1.DataSource = dt;
    GridView1.DataBind();
 }

我不会从DataTable中删除整个列,如果用户想显示它,就无法将其取回(而不从数据库或其他地方重新编码所有列)。我只显示/隐藏那个栏。

你必须先找到列的索引。CCD_ 2只支持按DataControlField查找索引,不支持按其HeaderText查找索引。如果您经常需要根据名称查找GridView列的索引,则可以使用以下扩展方法:

public static class Extensions
{
    public static int GetColumnIndex(this DataControlFieldCollection columns, string columnName, StringComparison comparison = StringComparison.CurrentCultureIgnoreCase)
    {
        for(int index = 0; index <  columns.Count; index++)
            if(columns[index].HeaderText.Equals(columnName, comparison))
                return index;
        return -1;
    }
}

现在你可以使用这个代码:

int colIndex = GridView1.Columns.IndexOf("Site_name");
GridView1.Columns[colIndex].Visible = isColumnVisible; // acc. to your logic