DevExpress Winform - 如何在多个关键字段上比较两个gridcontrol之间的数据

时间:2016-09-26 06:56:19

标签: c# winforms devexpress

我有2 gridControl,我想更改2 gridControl之间不同的单元格(行)背景,主键是用户设置的多个字段。
解决这个问题的任何方法?

See this example image

在这两个查询中,关键字段是col1,col2,col3和col4。在col6中不同,我想突出显示具有不同值的单元格。

这是我当前的RowCellStyle事件代码

 private void gvQuery1_RowCellStyle(object sender, RowCellStyleEventArgs e)
 {
     if (gcQuery2.DataSource == null || lsKey == null || lsKey.Count <= 0)
         return;

     List<object> id = new List<object>();
     foreach (KeyObject key in lsKey)
     {
         id.Add((sender as GridView).GetRowCellValue(e.RowHandle, key.key1[1].ToString()));
     }
     for (int i = 0; i < gvQuery2.RowCount; i++)
     {
         int rowHandle = gvQuery2.GetVisibleRowHandle(i);
         bool flgEqual = true;

         for (int j = 0; j < lsKey.Count; j++)
         {
             object v = gvQuery2.GetRowCellValue(rowHandle, gvQuery2.VisibleColumns[int.Parse(lsKey[j].key2[0].ToString())]);
             if (id[j] == null && v == null)
                 continue;
             if (!id[j].GetType().Equals(v.GetType()) || !id[j].ToString().Equals(v.ToString()))
             {
                 flgEqual = false;
                 break;
             }
         }

         if (flgEqual)
         {
             for (int k = 0; k < (sender as GridView).Columns.Count; k++)
             {
                 if (!(sender as GridView).GetRowCellValue(e.RowHandle, (sender as GridView).Columns[k].FieldName).ToString()
                     .Equals(gvQuery2.GetRowCellValue(rowHandle, (sender as GridView).Columns[k].FieldName).ToString()))
                 {
                     if (e.Column.FieldName.Equals((sender as GridView).Columns[k].FieldName))
                         e.Appearance.BackColor = Color.Orange;
                 }
             }

             break;
         }
     }
 }

2 个答案:

答案 0 :(得分:0)

使用 void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e) { GridView currentView = sender as GridView; if (e.Column.FieldName == "Customer") { bool value = Convert.ToBoolean(currentView.GetRowCellValue(e.RowHandle, "Flag_Customer")); if (value) e.Appearance.BackColor = Color.Red; } if (e.Column.FieldName == "Vendor") { bool value = Convert.ToBoolean(currentView.GetRowCellValue(e.RowHandle, "Flat_Vendor")); if (value) e.Appearance.BackColor = Color.Red; } } 事件,可以更改单个单元格的外观设置

请参阅本网站以供参考 https://www.devexpress.com/Support/Center/Question/Details/Q520842

{{1}}

答案 1 :(得分:0)

请参阅: Customizing Appearances of Individual Rows and Cells

  

您可以使用以下功能实现您的功能   GridView.RowCellStyle事件。将为每个单元格触发此事件   网格视图,因此它具有 RowHandle 参数   识别被绘制的细胞。

我假设您在两个网格中都有固定数量的记录,并且记录的顺序也相同。然后,您可以尝试使用相同的行句柄来访问RowCellStyle事件中两个网格的MainView中的值,如下所示:

 using DevExpress.XtraGrid.Views.Grid;
    // ... 
    private void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e) {
       GridView View = sender as GridView;
       GridView leftGridView = leftGrid.MainView as GridView; //It is up to you that which viewtype you have used.
       if(e.Column.FieldName == "Col5") {
          string srcVal= View.GetRowCellDisplayText(e.RowHandle, View.Columns["Col5"]); // You can use GetRowCellValue() method also to get the value from the cell.
          string leftGridVal= leftGridView .GetRowCellDisplayText(e.RowHandle, leftGridView .Columns["Col5"]);
          if(srcVal != leftGridVal) {
             e.Appearance.BackColor = Color.DeepSkyBlue;
             e.Appearance.BackColor2 = Color.LightCyan;
          }
       }
    }

上面的代码片段就像一个sudo代码,可以指导你实现这个功能..在你想要着色的网格上处理这个事件。记得要小心RowHandle,你要关心这行索引。

希望这有帮助..