我有一个带有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++;
}
}
答案 0 :(得分:2)
除非您处理 GridView RowStyle 事件,否则一旦网格自行刷新,您尝试进行的任何更改都将立即撤消。
您是否有理由不想使用事件来设置行颜色?您可以简单地缓存每个 vehicleID 的颜色,然后在 RowStyle 事件中设置适当的颜色。
这是DevExpress文档,概述了自定义行外观: https://documentation.devexpress.com/#WindowsForms/CustomDocument758
答案 1 :(得分:0)
如果您具有有限数量的条件,您实际上可以使用网格设计器中的格式条件在没有任何事件(甚至是RowCellStyle)的情况下执行此操作。如果进入设计模式并选择“外观”,然后选择“格式条件”,则可以添加一系列格式条件及其相应的效果。
每个格式条件都有一个名为“Apply To Row”的属性,您可以在其中为单个列定义条件,但格式可以仅应用于该列,也可以应用于其他列或整个行。
缺点是每种颜色需要一种格式条件,除非你将设计师代码劫持到表单代码中(这不一定是个坏主意)。
如果System.Color实际上是您的某个属性的数据类型,并且您有无限(或大)的可能性,那么RowCellStyle
事件就可以了。
顺便说一下,根据您的上一条评论,您可以在加载期间始终停用RowCellStyle
,并在Shown
事件完成后重新设置它。