【问题标题】:how to change Devexpress Grid Row color without event如何在没有事件的情况下更改 Devexpress Grid Row 颜色
【发布时间】:2014-09-17 10:51:10
【问题描述】:

我有一个包含车辆列表网格的 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++;
  }
}

【问题讨论】:

    标签: c# winforms visual-studio devexpress


    【解决方案1】:

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

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

    以下是概述自定义行外观的 DevExpress 文档: https://documentation.devexpress.com/#WindowsForms/CustomDocument758

    【讨论】:

    • 唯一的原因是因为我不想在“加载时间”更改 RowStyle,但我找到了 GridView.RefreshRow(int rowHandle) 和处理 RowStyle 事件的解决方法。谢谢
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 如果我想改变一个随机行的外观,只知道它的 rowHandle 怎么办?这不是我的实际用例,而是类似的:如果我想通过让用户单击“红色行”来进行鼠标训练练习,并且红色行每隔几秒钟就会不断变化并且只保持红色,该怎么办? 500毫秒?只知道 rowHandle,您如何获得对可让您设置行外观的对象的引用?
    • @Tim -- 这可能比使用格式条件可以合理完成的要多,但您仍然可以使用RowCellStyle 事件和 Windows 计时器来完成。当您创建事件处理程序时,您会注意到一个 e.RowHandle,您可以使用它来执行您所描述的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多