2

我在 Windows 窗体中更改行颜色时遇到问题。我用 Columns 做了它,并对 Rows 做了同样的尝试,但它没有用。有人可以告诉我怎么做吗?

到目前为止我的代码:

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        abc();
    }

    void abc()
    {
        DataTable hh = new DataTable();
        hh.Columns.Add("1", typeof(string));
        hh.Columns.Add("2", typeof(string));
        hh.Columns.Add("3", typeof(string));

        hh.Rows.Add(new object[] { "a", "b", "c" });
        hh.Rows.Add(new object[] { "a1", "b1", "c1" });
        hh.Rows.Add(new object[] { "a2", "b2", "c2" });

        dataGridView1.DataSource = hh;

        foreach (DataGridViewRow dr in dataGridView1.Rows) // trying to change all rows to orange
            dr.DefaultCellStyle.BackColor = Color.Orange;  // but it doesn't work

        dataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.Orange; // doesn't work
        dataGridView1.Refresh();
        dataGridView1.Update();

        dataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Beige; // this works


    }
}
4

3 回答 3

5

使用 Datagridview CellPainting 事件。只需在此处复制此代码即可。

        if (e.RowIndex == -1)
        {
            SolidBrush br= new SolidBrush(Color.Blue);
            e.Graphics.FillRectangle(br, e.CellBounds);
            e.PaintContent(e.ClipBounds);
            e.Handled = true;
        }
        else
        {
                SolidBrush br= new SolidBrush(Color.Orange);
                e.Graphics.FillRectangle(br, e.CellBounds);
                e.PaintContent(e.ClipBounds);
                e.Handled = true;

        }

if 检查它是否是 Header。使用你想要的颜色。如果你不想绘制标题,只需删除 if 中的所有代码。

我想要渐变背景色告诉我..

编辑:

这是用一种颜色绘制成对行并在另一种颜色中削弱的代码。您也必须使用 Cellpainting 事件..

else
        {
            if (e.RowIndex % 2 == 0)
            {
                SolidBrush br = new SolidBrush(Color.Gainsboro);

                e.Graphics.FillRectangle(br, e.CellBounds);
                e.PaintContent(e.ClipBounds);
                e.Handled = true;
            }
            else
            {
                SolidBrush br = new SolidBrush(Color.White);
                e.Graphics.FillRectangle(br, e.CellBounds);
                e.PaintContent(e.ClipBounds);
                e.Handled = true;
            }
        }

编辑 2: cellpainting 事件在哪里?

在此处输入图像描述

于 2013-01-25T13:49:21.180 回答
3

使用DataGridView.RowsDefaultCellStyle为所有行设置背景颜色:

dataGridView1.RowsDefaultCellStyle.BackColor = Color.Orange;

更新(如果你只想画一些行)你可以使用CellFormatting事件:

void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.RowIndex > 2) // condition
        e.CellStyle.BackColor = Color.YellowGreen;
}

您可以在 msdn 上阅读有关更改 DataGridView 样式的更多信息。

于 2013-01-25T13:55:02.817 回答
0
 Private Sub Coloriage()
    Dim fin As Integer = Gridarticles.Rows.Count - 1
    Dim i As Integer
    For i = 0 To fin
        If Gridarticles("stock", i).Value < 0 Then
            Gridarticles.Rows(i).DefaultCellStyle.BackColor = Color.Red
        ElseIf Gridarticles("stock", i).Value = 0 Then
            Gridarticles.Rows(i).DefaultCellStyle.BackColor = Color.Gray
        End If
    Next
End Sub
于 2017-12-07T12:00:17.640 回答