2010-06-28 2 views

ответ

0

идти с петлей, как

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

Это непроверенный код. пожалуйста, проверь это.

+2

Это будет работать. Однако удаление столбцов (2) всегда приведет к смещению дополнительных столбцов вниз, что делает это дорогостоящим. –

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. Если я не ошибаюсь, это означает, что вы получите «Индекс за пределами границ», исключение. –

+0

Я не думаю, что вы получите исключение «Index out of bounds», так как gridView.Columns.count переоценивается каждый раунд. Но многие столбцы просто не будут удалены (около половины из них). –

+0

ahhh, Правильно !. –

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(); 
} 
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

легче скрыть столбцы, а не удалять, так как удаление элемента перечисление заставляет перечислитель быть сброшен, поэтому вам нужно выполнить операцию добавления, чтобы рассмотреть такое поведение, ИМО.

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; 
} 
Смежные вопросы