显示选择的 gridview 列

问题描述

我有一个字符串列表,我试图用它来控制 gridview 中显示的列,但似乎无法弄清楚如何让它工作。这是一个示例 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 个值。

解决方法

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

您在做什么:遍历 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;
    }
}