2017-08-01 7 views
0

je tente de développer des applications aC# (collecte des produits par leurs codes-barres) aux fenêtres dispositif portatif CE avec compact framework 3.5Comment changer la couleur des lignes différentes dans les fenêtres DataGrid C# CE

J'ai un DataGrid et DataGrid est bind avec un datatable par sql. Il y a 4 colonnes dans ma grille de données, la 3ème colonne représente la quantité de produits à collecter, et la dernière colonne a la valeur par défaut 0 (quantité collectée). Chaque fois que l'utilisateur entre un code de produit, la quantité du produit augmente 1 par 1.

Je veux faire fond coloré de la ligne bleue lorsque l'utilisateur entre le code de produit correspondante (pour indiquer quel produit sont recueillis)

et Je veux aussi rendre la couleur de fond verte si l'utilisateur recueille les produits nécessaires.

J'ai essayé de colorier la ligne selon l'index sélectionné mais cela ne fonctionne pas. Lorsque la sélection a disparu, les couleurs ont disparu.

Voici une image de l'écran lorsque la quantité nécessaire de produit a été recueillie. enter image description here

Voici quand je veux voir la ligne traitée. enter image description here

Ci-dessous est mon code de l'événement keypress de la zone de texte (saisie de code produit)

 private void txtUrunkod_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     foreach (System.Data.DataColumn col in dt.Columns) col.ReadOnly = false; 
     if (e.KeyChar == (char)Keys.Enter) 
     { 
      islemkod = txtUrunkod.Text; 
      islemkod.Trim(); 

      if (islemkod.Contains('/')) 
      { 
       serikodbol = islemkod.Split('/'); 
       urunKodum = serikodbol[0]; 
       DataRow row = dt.Select("urunkodu='" + urunKodum + "'").FirstOrDefault(); 
       int guncelle = Convert.ToInt32(row[3]); 
       guncelle++; 
       row[3] = guncelle; 
      } 
      else if (islemkod.Length == 8) 
      { 
       SqlCommand cmd = new SqlCommand("exec MY_TOPUK_BILGI_GETIR '" + islemkod + "'", conStr); 
       conStr.Open(); 
       SqlDataReader dr = cmd.ExecuteReader(); 
       uk = new DataTable(); 
       uk.Load(dr); 
       conStr.Close(); 
       //toplamaGrid.Select(0); 
       foreach (DataRow row2 in uk.Rows) 
       { 
        urunKodum = row2[0].ToString(); 
       } 
       DataRow row = dt.Select("urunkodu='" + urunKodum + "'").FirstOrDefault(); 
       int guncelle = Convert.ToInt32(row[3]); 
       guncelle++; 
       row[3] = guncelle; 
       int index = -1; 
       bool found = false; 

       foreach (DataRow datr in dt.Rows) 
       { 
        index++; 
        string d = datr["urunkodu"].ToString(); 
        if (datr[0].ToString() == urunKodum) 
        { 
         found = true; 
         break; 
        } 
       } 


       if (found && !row[2].Equals(row[3])) 
       { 

        toplamaGrid.Select(index); 
        toplamaGrid.SelectionBackColor = Color.Blue; 
       } 
       else if (row[2].Equals(row[3])) 
       { 
        toplamaGrid.Select(index); 
        toplamaGrid.SelectionBackColor = Color.Green; 
        //toplamaGrid.UnSelect(index); 
       } 



      } 

      else if (islemkod.Length == 7 && islemkod[0] == 'P') 
      { 

      } 

      else//islemkod.Length != 8 && !islemkod.Contains('/') 
      {// 
       urunKodum = txtUrunkod.Text; 
       txtUrunkod.Visible = false; 
       lblurunkod.Visible = false; 
       txtifAdres.Visible = true; 
       lbladressor.Visible = true; 
       txtifAdres.Focus(); 

      } 
      updated = true; 
      txtUrunkod.Text = ""; 
      sonindex = 0; 
     } 
    } 

Je ne pourrais pas trouver beaucoup d'informations à ce sujet. Toute aide sera importante. Merci pour toute aide!

+0

Dupliquer de https://stackoverflow.com/questions/408113/changing-row-colors-in-the-compact-framework-datagrid?rq=1. Vous devez implémenter un dessin personnalisé dans l'événement Paint. – josef

Répondre

0

Tout d'abord, j'ai rencontré le même problème. Utiliser DataGridFormatCellEventArgs pour colorier la solution.

explained here Ajoutez le fichier DataGrid à votre code dans le lien. (DataGridFormatCellEventArgs.cs et FormattableTextBoxColumn.cs) Ces fichiers contiennent la classe Paint utilisée pour colorier.

different example

J'espère que je pourrais aider. Si vous rencontrez des difficultés, je peux donner un exemple de mon propre code.