问题描述
我有一个字符串列表,我试图用它来控制 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;
}
}