comment effacer la colonne GridView supérieure à l'indice 1.Comment effacer la colonne GridView supérieure à l'indice 1
grdview.Columns.Clear()
effacera toutes les colonnes, mais je dois effacer les colonnes supérieures à l'indice 1
comment effacer la colonne GridView supérieure à l'indice 1.Comment effacer la colonne GridView supérieure à l'indice 1
grdview.Columns.Clear()
effacera toutes les colonnes, mais je dois effacer les colonnes supérieures à l'indice 1
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.
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);
}
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. –
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). –
ahhh, Correct !. –
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();
}
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;
Vous pouvez utiliser le code suivant:
while(grid.Columns.Count > 2)
{
Grid.Columns.RemoveAt(grid.Columns.Count - 1);
}
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;
}
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. –