2017-08-09 65 views
-1

我有一个.NET Compact Framework 2.0智能设备app.I使用datagrid(不是datagridView,因为.NET Compact Framework智能设备应用程序不支持)。如何更改背景颜色动态行的运行时间?如何在c#.NET Compact Framework中编辑datagrid行backcolor

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中的行数据网格的背景有点复杂。

首先应该有一个ColumnStyle类继承自DataGridTextBoxColumn,您将在其中实现DataGridTextBoxColumn的绘制事件。

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; 
     } 
    } 

要清楚我发布整个有关datagrid行的backcolor变化。我有2种方法(myStyle_CheckRowContains,myStyle_isEven)来决定我将排成行的背景颜色(黄色和绿色)。在我的数据网格中,我有4列从SQL到Datatable(dt)。我检查行1和1,如果行的第3列和第4列的值是相等的,然后我将行背景绘制为黄色。如果第三列的值大于第四列,那么我将背景涂成黄色。

我希望我能帮上忙。如果有什么你可以问。这个问题真的花了我一些宝贵的时间。我更改并实施了我在此处看到的内容:datagrid formatting

相关问题