<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      將DataGrid中滿足條件的行設為不同的背景色(WinForm).

      [摘要]由于項目需要, 需要對DataGrid的數據行, 按不同的條件以不同的背景色相區別。 由于DataGrid中沒有相關的屬性和方法可以直接設置,要完成這個功能還挺費些功夫。在網上搜了半天,也沒找到解決...
      由于項目需要, 需要對DataGrid的數據行, 按不同的條件以不同的背景色相區別。 由于DataGrid中沒有相關的屬性和方法可以直接設置,要完成這個功能還挺費些功夫。在網上搜了半天,也沒找到解決方案。只好自己動手,豐衣足食了,:) 。研究了半天, 終于搞定它了。好東西不敢獨享,特貼出來,希望能給需要的人帶來些幫助。



      {

      //...

      //使用DataGridTableStyle 顯示DataGrid.

      DataGridTableStyle tableStyle = new DataGridTableStyle();
      tableStyle.MappingName = "customers";

      int numCols = _dataSet.Tables["customers"].Columns.Count;
      DataGridCellColorTextBoxColumn columnTextColumn ;
      for(int i = 0; i < numCols; ++i)
      {
      columnTextColumn = new DataGridCellColorTextBoxColumn();
      columnTextColumn.HeaderText = _dataSet.Tables["customers"].Columns[i].ColumnName;
      columnTextColumn.MappingName = _dataSet.Tables["customers"].Columns[i].ColumnName;

      //為每個單元格建立設置背景色的事件.
      columnTextColumn.CheckCellColor += new CellColorEventHandler(SetColorValues);

      tableStyle.GridColumnStyles.Add(columnTextColumn);
      }

      dataGrid1.TableStyles.Clear();
      dataGrid1.TableStyles.Add(tableStyle);

      dataGrid1.DataSource = _dataSet.Tables["customers"];

      }



      public void SetColorValues(object sender, DataGridCellColorEventArgs e)
      {
      //根據條件, 將相關行設置不同的背景色.
      //下例為國家(datagrid中第9列)為Mexico的行設置為紅色,USA的行設為黃色.
      if(Convert.ToString(dataGrid1[e.Row,8]) == "Mexico")
      e.BackColor = Color.Red;
      else if(Convert.ToString(dataGrid1[e.Row,8]) == "USA")
      e.BackColor = Color.Yellow;
      }


      public class DataGridCellColorEventArgs : EventArgs
      {
      private int _row;
      private Color _backcolor;

      public DataGridCellColorEventArgs(int row, Color val)
      {
      _row = row;
      _backcolor = val;
      }
      public int Row
      {
      get{ return _row;}
      set{ _row = value;}
      }
      public Color BackColor
      {
      get{ return _backcolor;}
      set{ _backcolor = value;}
      }
      }



      //為事件建立委托.
      public delegate void CellColorEventHandler(object sender, DataGridCellColorEventArgs e);

      public class DataGridCellColorTextBoxColumn : DataGridTextBoxColumn
      {
      public event CellColorEventHandler CheckCellColor;

      public DataGridCellColorTextBoxColumn()
      {
      }

      //繼承DataGridTextBoxColumn的Pain事件.
      protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight)
      {
      if(CheckCellColor != null)
      {
      //重繪畫時,設置當前行的背景色
      DataGridCellColorEventArgs e = new DataGridCellColorEventArgs(rowNum, Color.White);
      CheckCellColor(this, e);

      if(e.BackColor != Color.White)
      backBrush = new SolidBrush(e.BackColor);
      }

      base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
      }

      protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
      {
      base.Edit(source, rowNum, bounds, readOnly, instantText, cellIsVisible);
      }
      }



      日韩精品一区二区三区高清