2009-09-03 4 views
1

Je dois ajouter une couleur à des lignes particulières de DevExpress gridview. Il existe un événement RowStyle (expéditeur d'objet, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e). Cela fonctionne bien mais si je trier les données, les bons index sont perdus. Comment résoudre ce problème? Comment accéder aux données triées car je ne peux accéder qu'à la source de données. Je vous remercie. Voici le code qui fonctionne uniquement avec les données non trié:Les index perdus après le tri

private void dataGridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e) 
    { 
     try 
     { 

     if ((int)((DataTable)gridControl1.DataSource).Rows[e.RowHandle]["Lating"] > 0) 
      { 
       e.Appearance.BackColor = Color.Red; 

      } 
     } 
     catch 
     { 

     } 

    } 
+0

Je ne comprends pas ce que vous entendez par "les bons index sont perdus" pouvez-vous clarifier s'il vous plaît? Merci. – Konstantinos

+0

E.g. J'ai 4 lignes avec les valeurs 1,4,2,3 et les index sont 0,1,2,3. Après le tri, les valeurs sont 1,2,3,4 avec les indices 0,1,2,3. Si j'attrape les valeurs de la source de données par index, j'obtiendrai des valeurs incorrectes. –

+0

Je suppose donc qu'en utilisant les données d'affichage au lieu de la source de données, vous obtiendrez des résultats corrects? – Konstantinos

Répondre

0

vous souhaitez définir le AlternatingRowsDefaultCellStyle pour la grille de données.

ex: this.myDataGrid.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle14;

Cela supposait que vous étiez en train d'alterner les couleurs des lignes. Pardon. Vos paramètres doivent être conservés même sur un tri, sauf si vous avez fait votre propre fonction de tri.

+0

Je ne pense pas qu'il le demande mais pour une coloration personnalisée basée sur le champ Lating. – Konstantinos

1

un coup d'oeil à l'exemple fourni dans la documentation DevEX:

using DevExpress.XtraGrid.Views.Grid; 

private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e) { 
    GridView View = sender as GridView; 
    if(e.RowHandle >= 0) { 
     string category = View.GetRowCellDisplayText(e.RowHandle, View.Columns["Category"]); 
     if(category == "Beverages") { 
      e.Appearance.BackColor = Color.Salmon; 
      e.Appearance.BackColor2 = Color.SeaShell; 
     }    
    } 
} 

Comme vous pouvez le remarquer qu'ils accèdent à la vue de la grille des données sur la colonne et non la source de données directement.

Espérons que cela aide.

0

Vous pouvez soit prendre l'approche Konstantinos décrit ou utiliser

gridView.GetDataRow(e.RowHandle)["Lating"] 

pour accéder à l'ensemble de données sous-jacentes.

Questions connexes