2013-08-27 3 views
1

J'ai un GridView dans lequel j'ai ajouté des HeaderRows supplémentaires à divers points pour donner l'illusion de différentes sections à la GridView. Le problème que j'ai est que lorsque je fais une publication, les HeaderRows que j'ai créés se transforment en lignes vides. Je suis en mesure d'ajouter des HeaderRows supplémentaires à nouveau, mais je suis alors confronté au problème des lignes vides "bumping" les données dans les "sections" incorrectes. Qu'est-ce que je voudrais faire est, sur la publication, appelez une fonction qui traverse le GridView et supprime les lignes vides/Old HeaderRows, puis appelez la fonction qui a ajouté les HeaderRows en premier lieu.Supprimer ligne vide de GridView sans connexion DB

J'ai besoin d'aide pour supprimer les lignes. Le code que j'ai en ce moment pour la fonction est:

protected void removeBlankRows() 
{ 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     if (row.Cells[6].Text == "") 
     { 
      //-->code to remove blank row here<-- 
     } 
    } 
} 
+0

La ligne vierge que vous souhaitez supprimer sera-t-elle toujours à l'index 6? –

Répondre

0
protected void removeBlankRows() 
{ 
    for (int i = 0; i < GridView1.Rows.Count; i++) 
      { 
       if (GridView1.Rows[i].RowType == DataControlRowType.DataRow) 
       { 
        string strtrial = Convert.Tostring(row.Cells[6].Text); 
        if(string.IsNullOrEmpty(strtrial)) 
        GridView1.DeleteRow(i); 
       } 
      } 

Cependant, il sera mieux si vous supprimez les lignes en cas Rowbound.

+0

Je déconseille de modifier une collection en itérant. Même si cela fonctionne dans ce cas, vous demandez des ennuis quand vous prenez cette habitude. – priehl

+0

@priehl Je vais prendre le conseil mais pouvez-vous s'il vous plaît élaborer plus, tout ce que je pense est maintenant des transactions concurrentes, ce qui ne semble pas être un problème ici (ai-je raison?). Un bon conseil est toujours le bienvenu, merci! –

0
var blanks = GridView1.Rows 
    .Where(e => string.IsNullOrEmpty(e.Cells[6].Text)) 
    .Select(e => e.RowIndex); 

foreach(var blank in blanks) 
    GridView1.DeleteRow(blank); 
0

Pourquoi ne pas simplement cacher la ligne?

private void GridView_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.Cells[6].Text == "") 
     e.Row.Visible = false; 
} 

De même, pourquoi ne cachez-vous pas vos enregistrements sur l'événement de liaison de données plutôt que de parcourir les lignes?

Questions connexes