2010-06-28 2 views

Répondre

0

go avec la boucle comme

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

Il est code non testé. s'il te plaît vérifie le.

+2

Cela fonctionne. Cependant, la suppression des colonnes (2) entraînera toujours le déplacement des colonnes supplémentaires, ce qui rend cette opération coûteuse. –

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

Correction

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

Le problème avec ceci est qu'après avoir enlevé la colonne à l'index 2, la colonne qui * était * à l'index 3 sera maintenant à l'index 2. Sauf erreur de ma part, cela signifie que vous aurez un "Index hors limites" exception. –

+0

Je ne pense pas que l'on obtiendra une exception "Index out of bounds", car le gridView.Columns.count est réévalué à chaque tour. Mais beaucoup de colonnes ne seront pas supprimées (environ la moitié d'entre elles). –

+0

ahhh, Correct !. –

1

Je ne suis pas programmeur C#, mais je suppose que, comme dans les collections Delphi (même architecte linguistique) sont basés 0. donc

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

Si vous supprimez de 2 à gridView.Columns.count - 1 alors vous ne supprimera pas toutes les colonnes, car ils se décalés lorsqu'on enlève une colonne, soit après la première colonne de supprimer deux, la colonne le troisième est maintenant deuxième, mais la prochaine colonne supprimée sera la troisième (i = 3).

Alternative:

while (gridView.Columns.Count > 2) 
{ 

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

Je crois que vous travaillez avec ASP.NET cela va faire. Cependant, j'aimerais savoir pourquoi vous voulez supprimer la colonne. Je pourrais vous donner une meilleure solution.

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

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

ou si vous utilisez un champ de modèle

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

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

Vous pouvez utiliser le code suivant:

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

Il est plus facile de masquer les colonnes plutôt que de supprimer, car la suppression d'un élément de L'énumération entraîne la réinitialisation de l'énumérateur, ce qui nécessite une opération d'ajout pour prendre en compte un tel comportement, IMO.

using System.Linq; 

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

ou

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