【问题标题】:Show select gridview columns显示选择 gridview 列
【发布时间】:2021-04-29 18:33:22
【问题描述】:

我有一个字符串列表,我试图用它来控制网格视图中显示的列,但似乎无法弄清楚如何让它工作。这是一个例子List<string> selectedHeaders = new List<string>(new string[] { "header1", "header2", "header3", "header4" });

如何遍历 gridview 列并将它们与 selectedHeaders 中的值进行比较,并将所有不匹配的列的可见性设置为 false。另请注意,selectedHeaders 的数量可能与 gridview 中的总列数不同。

这是我目前所拥有的:

foreach (GridViewRow row in gvEmployees)
{
   for (int i = 0; i < gvEmployees.Columns.Count; i++)
   {
      if (gvEmployees.Column[i].HeaderText != selectedHeaders[i])
      {
         gvEmployees.Column[i].Visible = false;
      }
   }
}

我不知道如何折射这个它给了我一个索引超出范围的错误,因为 gridview 有 6 列,但 selectedHeaders 可能包含 1-6 个值。

【问题讨论】:

    标签: c# asp.net webforms aspxgridview


    【解决方案1】:

    你的循环对你想要完成的事情没有意义。

    您在做什么:遍历 GridView 中的每一行,并遍历其中的每一列,并在您的 selectedHeaders 中查找具有匹配索引的字符串

    您需要做的:遍历每一列,并检查 selectedHeaders 中是否有相应的记录,按值而不是按索引位置。

    将您的代码更改为:

    for (int i = 0; i < gvEmployees.Columns.Count; i++)
    {
        if (!selectedHeaders.Any(h => h == gvEmployees.Column[i].HeaderText))
        {
            gvEmployees.Column[i].Visible = false;
        }
    }
    

    【讨论】:

    • 感谢您的回复;但是,您编写的代码给了我以下错误“对象”不包含“HeaderText”的定义,并且找不到接受“对象”类型的第一个参数的可访问扩展方法“HeaderText”(您是否缺少 using 指令还是程序集参考?)
    • @user721126 我已经更新了代码。 Web 表单并不总是能很好地与 foreach 循环配合使用,因此我将其切换为 for 循环。
    • 非常感谢您解释我做错了什么。这非常有效!
    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多