2

Windows フォームで行の色を変更する際に問題があります。列でそれを行い、行でも同じことを試みましたが、うまくいきませんでした。誰かがそれを行う方法を教えてもらえますか?

これまでの私のコード:

 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 は、ヘッダーかどうかをチェックします。必要な色を使用してください。ヘッダーをペイントしたくない場合は、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;

UPDATE(一部の行のみをペイントする場合)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 に答える