2017-08-09 26 views
-1

私は.NET Compact Framework 2.0スマートデバイスappを持っています。DataGridを使用しています(.NET Compact FrameworkスマートデバイスアプリケーションはサポートしていないためdatagridViewではありません)。実行時に動的に行を追加しますか?C#でデータグリッド行のバックカラーを編集する方法

my code here 

DataTable dt = new DataTable(); 
dt.Clear(); 
dt.Columns.Add("Name"); 
dt.Columns.Add("Jobs"); 
DataRow row= dt.NewRow(); 
row["Name"] = "aaaa"; 
row["Jobs"] = "bbbb"; 
dt.Rows.Add(row); 

myDataGrid.DataSource = dt; 
+0

https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.rowstyle(v=vs.110).aspx –

+0

そのリンクを解決していない私の問題 –

答えて

0

CFのDataGridの行の背景色を変更するのが少し複雑です。

まず、DataGridTextBoxColumnのペイントイベントを実装するDataGridTextBoxColumnから継承するColumnStyleクラスが必要です。

namespace SmartBox 
{ 
    public delegate void CheckCellEventHandler(object sender, DataGridEnableEventArgs e); 

    public class DataGridEnableEventArgs : EventArgs 
    { 
     private int _column; 
     private int _row; 
     private bool _meetsCriteria; 

     public DataGridEnableEventArgs(int row, int col)// 
     { 
      _row = row; 
      _column = col; 
     } 

     public DataGridEnableEventArgs(int row, int col, bool val)// 
     { 
      _row = row; 
      _column = col; 
      _meetsCriteria = val; 
     } 

     public int Column 
     { 
      get { return _column; } 
      set { _column = value; } 
     } 

     public int Row 
     { 
      get { return _row; } 
      set { _row = value; } 
     } 

     public bool MeetsCriteria 
     { 
      get { return _meetsCriteria; } 
      set { _meetsCriteria = value; } 
     } 
    } 


    class ColumnStyle : DataGridTextBoxColumn 
    { 
     public event CheckCellEventHandler CheckCellEven; 
     public event CheckCellEventHandler CheckRowContains; 

     private int _col; 

     public ColumnStyle(int column) 
     { 
      _col = column; 
     } 

     protected override void Paint(Graphics g, Rectangle Bounds, CurrencyManager Source, int RowNum, Brush BackBrush, Brush ForeBrush, bool AlignToRight) 
     { 
      bool enabled = true; 

      if (CheckCellEven != null) 
      { 
       DataGridEnableEventArgs e = new DataGridEnableEventArgs(RowNum,_col, enabled);//, _col 
       CheckCellEven(this, e); 
       if (e.MeetsCriteria) 
        BackBrush = new SolidBrush(Color.PaleGreen); 

      } 

      if (CheckRowContains != null) 
      { 
       DataGridEnableEventArgs e = new DataGridEnableEventArgs(RowNum, _col, enabled); 
       CheckRowContains(this, e); 
       if (e.MeetsCriteria) 
       { 
        BackBrush = new SolidBrush(Color.Yellow); 
       } 
      } 

      base.Paint(g, Bounds, Source, RowNum, BackBrush, ForeBrush, AlignToRight); 
     } 
    } 

とメインフォームで、あなたが行背景色をペイントしますどのような条件で決めます。

private void addGridStyle(ref DataGrid dg, DataTable cem) 
    { 
     DataGridTableStyle dtStyle = new DataGridTableStyle(); 
     dtStyle.MappingName = cem.TableName; 

     for (int i = 0; i < dt.Columns.Count; i++) 
     { 
      ColumnStyle myStyle = new ColumnStyle(i); 
      myStyle.MappingName = dt.Columns[i].ColumnName; 

      if (dt.Columns[i].ColumnName == "urunadi" || dt.Columns[i].ColumnName == "urunkodu" || dt.Columns[i].ColumnName == "toplanan_miktar" || dt.Columns[i].ColumnName == "miktar") 
       myStyle.CheckCellEven += new CheckCellEventHandler(myStyle_isEven); 

      if (dt.Columns[i].ColumnName == "urunadi" || dt.Columns[i].ColumnName == "urunkodu" || dt.Columns[i].ColumnName == "toplanan_miktar" || dt.Columns[i].ColumnName == "miktar") 
       myStyle.CheckRowContains += new CheckCellEventHandler(myStyle_CheckRowContains); 

      dtStyle.GridColumnStyles.Add(myStyle); 
     } 
     dg.TableStyles.Add(dtStyle); 
     dg.ColumnHeadersVisible = true; 
    } 

    public void myStyle_isEven(object sender, DataGridEnableEventArgs e) 
    { 
     try 
     { 
      if ((int)toplamaGrid[e.Row, 2] == (int)toplamaGrid[e.Row, 3]) 
       e.MeetsCriteria = true; 
      else 
       e.MeetsCriteria = false; 
     } 
     catch (Exception ex) 
     { 
      e.MeetsCriteria = false; 
     } 
    } 

    public void myStyle_CheckRowContains(object sender, DataGridEnableEventArgs e) 
    { 
     try 
     { 
      if (((int)toplamaGrid[e.Row, 2] > (int)toplamaGrid[e.Row, 3]) && (int)toplamaGrid[e.Row, 3] > 0) 
       e.MeetsCriteria = true; 
      else 
       e.MeetsCriteria = false; 
     } 
     catch (Exception ex) 
     { 
      e.MeetsCriteria = false; 
     } 
    } 

明確にするには、データグリッド行の背景色の変更について全体を投稿します。

2つのメソッド(myStyle_CheckRowContains、myStyle_isEven)を使用して、どの色を行の背景にするかを決定します(黄色と緑色)。私のDataGridには、SQLからDatatable(dt)に変換される4つのカラムがあります。私は行1をチェックし、行の3列目と4列目の値が等しい場合、行の背景を黄色にペイントします。 3番目の列の値が4番目の列より大きい場合は、背景を黄色に塗ります。

私は助けてくれることを願っています。何かがある場合は、あなたに聞くことができます。この問題は実際に私の貴重な時間の一部を取る。私はここで見たものを変更して実装しました:datagrid formatting

関連する問題