2010-06-28 18 views

回答

0

去更大的列如

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

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

+2

这将工作。然而,删除列(2)总是会导致额外的列向下移动,这使得代价很高。 – 2010-06-28 09:53:28

1
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); 
    } 
+0

这样做的问题是,在删除索引2处的列之后,索引3处的*为*的列现在将位于索引2处。除非我误认为,这意味着您会得到“索引超出范围”例外。 – 2010-06-28 09:34:07

+0

我不认为人会得到“索引越界”异常,因为gridView.Columns.count每轮都会重新评估。但是许多列不会被删除(大约一半)。 – 2010-06-28 09:50:41

+0

啊,对啊! – 2010-06-28 10:20:40

1

我不是C#程序员,但我认为在德尔福(同一种语言建筑师)集合是基于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(); 
} 
2

我相信你有这个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; 
3

您可以使用下面的代码:

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

它更容易隐藏列,而不是删除,因为删除的元素枚举会导致枚举器被重置,因此您需要执行一个添加操作来考虑这种行为,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; 
}