2010-09-11 8 views
1

J'ai le problème suivantproblème avec les objets DataTable et DataGridView

Dans mon aplication je fais quelques calculs et après les mettre en objet DataTable (6 colonnes, données dans le dernier est le plus important). Pour voir les résultats, je les mets dans l'objet DataGridView et il y a mon problème. Selon les données contenues dans la dernière colonne, je veux marquer les cellules sur les couleurs appropriées. Et je ne sais pas si je devrais le faire sur l'objet DataGridView car il s'agit d'interfaces utilisateur? Où je peux faire ça? Objet DataTable n'a pas de propriétés de style?

Merci beaucoup ...

+0

Quelle langue vous parlez? C#? S'il s'agit de C# /. Net, ajoutez également ces balises. Cela vous aidera à obtenir des réponses plus rapidement. –

Répondre

0

Vous pouvez utiliser l'événement CellPainting du DataGridView pour formater vos cellules en fonction de leur contenu.

par exemple. `

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
    { 
     if (e.ColumnIndex >= 0 && e.RowIndex >= 0) 
     { 

      switch (dataGridView1.Columns[e.ColumnIndex].DataPropertyName) 
      { 
       case "Description": 
        { 
         break; 
        } 
       case "NormalRoom": 
        { 
         break; 
        } 
       case "Colour1": 
       case "Colour2": 
        { 
         Color co = Color.White; 
         if (e.Value != null && e.Value != DBNull.Value) 
         { 
          co = string2Color((string)e.Value); 
         } 
         e.CellStyle.BackColor = Color.White; 
         e.CellStyle.ForeColor = Color.Black; 

etc.`

+0

La solution de Karol fonctionnerait mais pourrait être lente si l'ensemble de données est grand. En outre, vous devrez vous assurer qu'il s'exécute chaque fois que les données ont changé. Ma méthode a l'avantage d'être automatique et efficace car elle n'a besoin que de gérer les données réellement visibles à l'écran. – FixerMark

0

Je l'ai fait simething comme ceci:

public void setABCColor(DataGridView DGV) 
    { 
     for (int i = 0; i < DGV.Rows.Count; i++) 
     { 
      if ((string)DGV.Rows[i].Cells[6].Value == "A") 
      { 
       DGV.Rows[i].Cells[6].Style.BackColor = Color.Green; 
      } 
      else if ((string)DGV.Rows[i].Cells[6].Value == "B") 
      { 
       DGV.Rows[i].Cells[6].Style.BackColor = Color.Blue; 
      } 
      else 
      { 
       DGV.Rows[i].Cells[6].Style.BackColor = Color.Red; 
      } 
     } 
    } 

Est-ce acceptable? Cela ne change-t-il pas l'hypothèse du modèle de conception MVC?

0

Je vous recommande de mettre la logique dans l'événement Mise en forme de cellule de la vue de données. Ces seraient également tenir compte des changements dans le cas où vos données changent dynamiquement en fonction des calculs dans la grille quelque chose comme

void myDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
      if (e.Value.ToString() == "A") 
       e.CellStyle.BackColor = Color.Red; 
} 
Questions connexes