在DevExpress GridView中更改行颜色

3

我想在DevExpress GridView中将一行的颜色更改为绿色。当我搜索时,我发现了许多网站上如何做到这一点的示例...但这是一个Windows应用程序。我找不到任何关于Windows应用程序的信息,所以有人可以帮我一下吗?

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

忘记提到,这是一个C#应用程序。

感谢您的帮助。


你是指背景颜色还是前景颜色? - Giannis Paraskevopoulos
背景颜色,但前景颜色稍后会有帮助,所以两者都需要。 - 5tar-Kaster
设计时还是运行时? - Giannis Paraskevopoulos
当我点击一个按钮时,我希望它改变颜色。我猜这意味着在运行时改变颜色? - 5tar-Kaster
2个回答

6

要在运行时更改行颜色,请处理 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>();
    }

}

你会选择哪一行呢?我有一个解决方案,但需要更多信息。 - Giannis Paraskevopoulos
我使用gridView1.FocusedRowHandle来确定在单击按钮更改颜色之前最后单击的是哪一行。 - 5tar-Kaster
我会把你标记为答案,因为你帮助我找到了解决方案,而且你也帮了我很多,谢谢。你的解决方案看起来应该是可行的,但我会坚持使用我在你的帮助下找到的那个。再次感谢你的帮助。 - 5tar-Kaster
很高兴我能提供帮助。如果您能发布您的解决方案以供参考,那就太好了。 - Giannis Paraskevopoulos
我寻找这个解决方案已经一个多小时了!非常感谢。 - poudigne
@Giannis Paraskevopoulos 我找不到足够宏大的词语来表达非常感谢你。 - M.Bouabdallah

0
我建议您使用以下简单的解决方案:
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

相关帮助主题:自定义各个行和单元格的外观


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接