在 DevExpress GridView 上更改行颜色

Posted

技术标签:

【中文标题】在 DevExpress GridView 上更改行颜色【英文标题】:Changing Row Colours on DevExpress GridView 【发布时间】:2013-08-13 20:31:25 【问题描述】:

我正在尝试在 devexpress 网格视图中将行的颜色更改为绿色。搜索时,我在网站上找到了许多如何执行此操作的示例……但这是一个 Windows 应用程序。我在 Windows 应用程序上找不到任何东西,所以有人可以在这里帮帮我。

我只是想将单行的颜色更改为绿色。

忘了说,它是一个 C# 应用程序。

感谢您的帮助。

【问题讨论】:

你是指背景色还是前景色? 背景色,但前景色稍后会有所帮助,所以实际上两者都 设计时间还是运行时间? 当我点击一个按钮时,我希望它改变颜色。我猜这意味着运行时间? 【参考方案1】:

要在运行时更改行颜色,请处理 RowStyle 事件:

    public Color color1;
    public Color color2;
    public int rowhandle;

    private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
    
        try
        
            if (e.RowHandle == rowhandle)
            
                if (color1 != null && color2 != null)
                
                    e.Appearance.BackColor = color1;
                    e.Appearance.BackColor2 = color2;
                
            
        
        catch
        
        
    

    private void button1_Click(object sender, EventArgs e)
    
        color1 = Color.BurlyWood;
        color2 = Color.DarkOrchid;
        rowhandle = gridView1.FocusedRowHandle;
        gridView1.RefreshRow(rowhandle);
    

下面的代码将保持颜色:

public partial class Form1 : Form


    public Color color1;
    public Color color2;
    public int rowhandle;
    public List<int> rowhandles;

    private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
    
        try
        
            if (rowhandles.Any(x=>x==e.RowHandle))
            
                if (color1 != null && color2 != null)
                
                    e.Appearance.BackColor = color1;
                    e.Appearance.BackColor2 = color2;
                
            
        
        catch
        
        
    

    private void button1_Click(object sender, EventArgs e)
    
        color1 = Color.BurlyWood;
        color2 = Color.DarkOrchid;
        rowhandle = gridView1.FocusedRowHandle;
        if (!rowhandles.Any(x => x == rowhandle))
            rowhandles.Add(rowhandle);
        gridView1.RefreshRow(rowhandle);
    

    public Form1()
    
        InitializeComponent();
    

    private void Form1_Load(object sender, EventArgs e)
    
        Dictionary<int, string> l = new Dictionary<int, string>();
        l.Add(1,"one");
        l.Add(2,"two");
        l.Add(3,"three");
        l.Add(4, "four");
        l.Add(5, "five");
        l.Add(6, "six");
        l.Add(7, "seven");
        l.Add(8, "eight");
        l.Add(9, "nine");

        gridControl1.DataSource = l.ToList();

        rowhandles = new List<int>();
    


【讨论】:

如何选择哪一行?我有一个解决方案,但我需要了解更多。 我使用 gridView1.FocusedRowHandle 来确定在单击按钮更改颜色之前最后单击了哪一行 我将把你标记为答案,因为你帮助我找到了解决方案,而且你帮助了我很多,谢谢。您在这里的解决方案看起来应该可行,但我将坚持在您的帮助下找到的解决方案。再次非常感谢。 很高兴能为您提供帮助。如果您可以发布您的解决方案以供进一步参考,那就太好了。 我寻找这个解决方案已经一个多小时了!非常感谢【参考方案2】:

我建议你使用以下简单的解决方案:

using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Base;
//...
gridControl1.DataSource = new List<DataObj> 
    new DataObj() ID=0, Name="A" ,
    new DataObj() ID=1, Name="B" ,
    new DataObj() ID=2, Name="C" ,
    new DataObj() ID=3, Name="D" ,
;
gridView1.CustomDrawCell += gridView1_CustomDrawCell;
//...
void gridView1_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e) 
    if(selectedRowHandle.GetValueOrDefault(GridControl.InvalidRowHandle) == e.RowHandle) 
        e.Appearance.BackColor = Color.Green;
    

int? selectedRowHandle;
void button1_Click(object sender, EventArgs e) 
    int prevSelectedRowHandle = selectedRowHandle.GetValueOrDefault(GridControl.InvalidRowHandle);
    if(prevSelectedRowHandle != GridControl.InvalidRowHandle)
        gridView1.RefreshRow(prevSelectedRowHandle); // reset row-style to default
    selectedRowHandle = gridView1.FocusedRowHandle;
    gridView1.InvalidateRow(gridView1.FocusedRowHandle); // row painting request

此解决方案基于GridView.CustomDrawCell 事件,当只需要更改某些特定行的外观时首选该事件。它也适用于当前选定的行,而不是 GridView.RowCellStyle。

相关帮助主题:Customizing Appearances of Individual Rows and Cells

【讨论】:

以上是关于在 DevExpress GridView 上更改行颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Devexpress MVC GridView 上获取选定的行?

在 DevExpress GridView 上更改行颜色

在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能

在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能

DevExpress 中gridview怎么才能新建一行?其中的gridview1.AddNewRecord()方法没用

devexpress gridview 中选择多行 剪切,粘帖功能怎么做?