2009-09-09 6 views
1

Je rencontre un problème étrange avec GridView. J'ai mis en place une colonne Select, et permet le tri. Si je sélectionne une ligne, puis trier la grille, la sélection reste en place et la grille trie. C'est-à-dire, la ligne en surbrillance est changée, mais l'index de la sélection ne semble pas.La ligne sélectionnée ne change pas après un tri GridView

En regardant la grille dans une montre, il semble que la propriété d'index sélectionnée reste la même, mais la clé de données sélectionnée change.

Je suis très confus et ai été incapable de trouver pourquoi ceci se produit, des pensées?

Répondre

2

Je trouve a change request for this exact issue qui stipule ce qui suit:

Il est par la conception que nous ne gardons pas trace de sélection à travers sortes, mises à jour, suppressions, etc. Cette partie pas changé.

Il semblerait que vous ayez besoin d'un moyen différent pour garder une trace de la ligne sélectionnée entre les tris.

+0

Ils ne peuvent pas vraiment garder la trace de l'enregistrement sélectionné, seule la ligne sélectionnée. Afin de garder une trace de l'enregistrement sélectionné, ils devraient savoir quels sont les champs clés primaires pour l'ensemble de données représenté, et cela sera probablement différent d'un cas à l'autre. Dans un cas, il peut s'agir d'un seul champ appelé ROWID; dans un autre cas, il pourrait s'agir d'une combinaison de trois champs; dans un troisième cas, les données - telles qu'elles sont ramenées - n'ont même pas de jeu de clés primaires. – eidylon

+0

Ahh, ben ça répond à ça pour moi! Au moins je sais que je ne suis pas fou maintenant. Je pense que je vais simplement laisser tomber la ligne sélectionnée, car je m'en fous si elle la suit. En fait, je garde une trace des lignes sélectionnées dans une grille à sélection multiple modifiée que nous utilisons. Cette grille particulière à sélection unique me rejetait cependant. Merci d'avoir éclairci les choses! – CodexArcanum

1

acctually, j'ai trouvé un moyen de contourner cela, peut-être pas si doux mais de toute façon, je suis ce que je voulais :) Dans la charge événement GridView_PreRender

GridView1_PreRender protected void (object sender, EventArgs e) { // trucate le texte si elle est à longue ..

 if (GridView1.Controls.Count != 0) 
     { 
      foreach (GridViewRow r in GridView1.Controls[0].Controls) 
      { 
       foreach (TableCell tc in r.Controls) 
       { 
        if (tc.Text != "" && tc.Text.Length > 39) 
        { 
         tc.Text = tc.Text.Substring(0, 39) + " ..."; 
        } 
       } 
      } 
     } 

     // here is the where the magic happens :) 
     if (GridView1.SelectedRow != null) 
     { 
      GridViewRow row = GridView1.SelectedRow; 
      if (row.Cells.Count > 1) 
      { 
       //Here I pick the p.keyID 
       SetOrderData(Convert.ToInt32(row.Cells[1].Text)); 

       this.LabelDebug.Text = row.Cells[1].Text; 
      } 
     } 
    } 
+0

Qu'est-ce que SetOrderData? – Pieces

Questions connexes