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

时间:2014-09-03 08:30:01

标签: c# asp.net checkbox datagridviewcolumn

我正在使用C#在Visual Studio 2012中创建一个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.
}

2 个答案:

答案 0 :(得分:1)

我发现一个非常简单的方法是在按钮点击时使用复选框显示和隐藏特定列。

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

答案 1 :(得分:0)

我不会从DataTable中删除整个列,如果用户想要显示它,则无法将其取回(无需从数据库或其他任何内容重新编码)。我只会显示/隐藏该列。

您必须先找到该列的索引。 DataControlFieldCollection.IndexOf仅支持按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