Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在没有事件的情况下更改Devexpress网格行颜色_C#_Winforms_Visual Studio_Devexpress - Fatal编程技术网

C# 如何在没有事件的情况下更改Devexpress网格行颜色

C# 如何在没有事件的情况下更改Devexpress网格行颜色,c#,winforms,visual-studio,devexpress,C#,Winforms,Visual Studio,Devexpress,我有一个带有UserControl的表单,其中包含一个车辆列表的网格,我想将车辆ID列表和颜色传递给方法,在该方法中,我想找到数据源中车辆ID所在的每个索引 使用这些索引,我希望获得RowHandle(或直接获得row对象),并使用在参数中传递的颜色更改背景色 private void ApplyColorRow(List<int> vehicleID, Color color) { var Index = 0; // foreach view the Datasource

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

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

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++;
  }
}
private void ApplyColorRow(列出车辆ID,颜色)
{
var指数=0;
//foreach查看数据源
foreach(此.VehicleViewer列表中的var视图)
{
//如果VehicleID列表包含VehicleID
if(vehicleID.Contains(View.VehicleData.vehicleID))
{
//查找与数据源索引对应的行句柄
var RowHandle=此.gvVehicle.GetRowHandle(索引);
//获取行对象
//这将返回与视图相对应的对象(在我的示例中为VehicleView)
//但是我需要Row对象来更改外观。
var Row=此.gvVehicle.GetRow(RowHandle);
//Row.BackColor=颜色;
}
索引++;
}
}

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

是否有不想使用事件设置行颜色的原因?您只需缓存每个车辆ID的颜色,然后在行样式事件中设置适当的颜色

以下是概述自定义行外观的DevExpress文档:

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

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

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

如果System.Color实际上是某个属性的数据类型,并且有不确定(或大量)的可能性,那么
RowCellStyle
事件就是最好的选择


顺便说一句,根据您最后的评论,您可以在加载过程中禁用
RowCellStyle
,并在所示
事件完成后重新启用它。

唯一的原因是我不想在“加载时”更改RowStyle,但我找到了一个解决办法,即使用GridView.RefreshRow(int rowHandle)和处理RowStyle事件。谢谢如果我只知道随机行的rowHandle,就想改变它的外观,那该怎么办?这不是我的实际用例,但与此类似:如果我想让用户通过单击“红色行”来进行鼠标训练,而红色行每隔几秒钟就会改变一次,并且仅保持红色500毫秒,该怎么办?只知道rowHandle,如何获得一个对象的引用来设置行的外观?@Tim——这可能超出了使用格式条件可以合理完成的范围,但您仍然可以使用
RowCellStyle
事件和Windows计时器来完成。创建事件处理程序时,您会注意到一个
e.RowHandle
,您可以使用它来执行所描述的操作。