如何在没有事件的情况下改变Devexpress Grid Row颜色

时间:2014-07-25 14:33:19

标签: c# winforms visual-studio devexpress

我有一个带有UserControl的表单,其中包含车辆列表的网格,我想将车辆ID列表和颜色传递给方法,在该方法中我想找到车辆ID所在的数据源的每个索引。在DataSource中。

使用这些索引我想获得RowHandle(或直接使用行对象)并使用我在参数中传递的颜色更改背景颜色。

private void ApplyColorRow(List<int> vehicleID, Color color)
{
  var Index = 0;
  // foreach view the Datasource 
  foreach (var View in this.VehicleViewList)
  {
    // if the list of VehicleID contains the vehicleID
    if (vehicleID.Contains(View.VehicleData.VehicleID))
    {
      // find the Row handle corresping to the datasource index
      var RowHandle = this.gvVehicle.GetRowHandle(Index);
      // Get the row object
      // This return an object corresponding to the View (VehicleView in my case)
      // But I need the Row object to change the appearance.
      var Row = this.gvVehicle.GetRow(RowHandle); 
      // Row.BackColor = color;
    }
    Index++;
  }
}

2 个答案:

答案 0 :(得分:2)

除非您处理 GridView RowStyle 事件,否则一旦网格自行刷新,您尝试进行的任何更改都将立即撤消。

您是否有理由不想使用事件来设置行颜色?您可以简单地缓存每个 vehicleID 的颜色,然后在 RowStyle 事件中设置适当的颜色。

这是DevExpress文档,概述了自定义行外观: https://documentation.devexpress.com/#WindowsForms/CustomDocument758

答案 1 :(得分:0)

如果您具有有限数量的条件,您实际上可以使用网格设计器中的格式条件在没有任何事件(甚至是RowCellStyle)的情况下执行此操作。如果进入设计模式并选择“外观”,然后选择“格式条件”,则可以添加一系列格式条件及其相应的效果。

每个格式条件都有一个名为“Apply To Row”的属性,您可以在其中为单个列定义条件,但格式可以仅应用于该列,也可以应用于其他列或整个行。

缺点是每种颜色需要一种格式条件,除非你将设计师代码劫持到表单代码中(这不一定是个坏主意)。

如果System.Color实际上是您的某个属性的数据类型,并且您有无限(或大)的可能性,那么RowCellStyle事件就可以了。

顺便说一下,根据您的上一条评论,您可以在加载期间始终停用RowCellStyle,并在Shown事件完成后重新设置它。