繁体   English   中英

如何清除大于索引1的GridView列

[英]How to clear the GridView column greater than index 1

如何清除大于索引1的GridView列。

grdview.Columns.Clear()将清除所有列,但我需要清除大于索引1的列

您可以使用以下代码:

while(grid.Columns.Count > 2)
{
    Grid.Columns.RemoveAt(grid.Columns.Count - 1);
}

我相信您正在使用ASP.NET做到这一点。 但是,我想知道为什么要删除该列。 我可以给您一个更好的解决方案。

foreach(DataGridColumn col in vGrid.Columns)
{
     col.Visible = false;
}

vGrid.Columns[0].Visible = true;
vGrid.Columns[1].Visible = true;

或者如果您正在使用模板字段

foreach(TemplateField col in vGrid.Columns)
{
    col.Visible = false;
}

vGrid.Columns[0].Visible = true;
vGrid.Columns[1].Visible = true;
for (i = 2; i < gridView.Columns.count; i ++)
{
   gridView.Columns[i].Remove();
}  

更正

    while(gridView.Columns.count>2)
    {
    gridView.Columns.RemoveAt(2);
    //Or gridView.Columns.RemoveAt(gridView.Columns.Count -1);
    }

我不是C#程序员,但我假设像在Delphi(相同的语言架构师)中那样,集合是基于0的。 因此

for (i = gridView.Columns.count - 1; i > 1; i --)
{
   gridView.Columns[i].Remove();
}  

如果从2删除到gridView.Columns.count-1,那么您将不会删除所有列,因为在删除列时它们会移位,即,在第一次删除第二列之后,第三列现在是第二列,但是下一个删除的列将是第三列(i = 3)。

替代方案:

while (gridView.Columns.Count > 2) 
{

   gridView.Columns[gridView.Columns.Count - 1].Remove();
}  

像这样循环

for (i = 2; i < grdview.columns.count; i ++)
{
   grdview.columns[2].remove();
}  

它是未经测试的代码。 请检查一下。

隐藏列比删除列更容易,因为删除枚举元素会导致枚举数被重置,因此您需要执行加法操作来考虑这种行为IMO。

using System.Linq;

GridView1.Columns
    .OfType<DataControlField>()
    .Where(c => GridView1.Columns.IndexOf(c) > 1)
    .ToList()
    .ForEach(c => c.Visible = false);

要么

foreach(var c in GridView1.Columns
                              .OfType<DataControlField>()
                              .Where(c => GridView1.Columns.IndexOf(c) > 1))
{
    c.Visible = false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM