如何改变Devexpress网格行颜色没有事件

本文关键字:颜色 事件 网格 Devexpress 何改变 改变 | 更新日期: 2023-09-27 18:14:44

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

使用这些索引,我想获得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++;
  }
}

如何改变Devexpress网格行颜色没有事件

除非你处理了GridViewRowStyle事件,否则你试图做的任何更改都会在网格刷新后立即撤销。

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

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

如果您有有限数量的条件,您实际上可以在没有任何事件(甚至RowCellStyle)的情况下使用网格设计器中的格式条件来做到这一点。进入设计模式,选择"外观",再选择"格式条件",可以添加一系列格式条件和相应的效果。

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

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

如果系统。颜色实际上是你的一个属性的数据类型,并且你有无限(或大量)的可能性,那么RowCellStyle事件就是你要走的路。

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