0

DataGridViewLinkColumn があります。ヘッダー (行 = -1) を下線として作成し、背景色を変更するにはどうすればよいですか

var WarningsColumn = new DataGridViewLinkColumn
            {

                Name = @"Warnings",
                HeaderText = @"Warnings",
                DataPropertyName = @"WarningsCount",
                AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,               
                ReadOnly = true
            };
4

2 に答える 2

2

これを試して:

dataGridView1.EnableHeadersVisualStyles = false;

dataGridView1.ColumnHeadersDefaultCellStyle
    = new DataGridViewCellStyle {BackColor = Color.Yellow, Font = new Font(dataGridView1.Font, FontStyle.Underline)};

DataGridView.ColumnHeadersDefaultCellStyle Propertyの MSDN リファレンスから:

ビジュアル スタイルが有効で、EnableHeadersVisualStyles が true に設定されている場合、TopLeftHeaderCell を除くすべてのヘッダー セルは現在のテーマを使用して描画され、ColumnHeadersDefaultCellStyle 値は無視されます。

したがって、それを設定してからFalseデフォルトをオーバーライドすると、次のような結果になります(動作を確認するための簡単で汚いテスト)

ここに画像の説明を入力

編集:

単一の列にスタイルを適用するには、代わりにこれを使用します( の を設定するコードの後に​​これを配置する必要がありますDataSource) DataGridView

dataGridView1.Columns["your_column_name"].HeaderCell.Style
    = new DataGridViewCellStyle { BackColor = Color.Yellow, Font = new Font(dataGridView1.Font, FontStyle.Underline) };

ここに画像の説明を入力

于 2013-06-08T03:55:18.650 に答える
1

CellPainting次のようなイベント ハンドラーにカスタム コードを追加する必要があると思います。

 Point spot;
 private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.RowIndex == -1 && e.ColumnIndex > -1)
        {
            e.Handled = true;
            if (e.CellBounds.Contains(spot))//Mouse over cell
            {
                PaintCellBackground(e.Graphics, Color.Red, e.CellBounds);
            }
            else //Mouse leave cell
            {
                PaintCellBackground(e.Graphics, Color.Green, e.CellBounds);
            }
            StringFormat sf = new StringFormat(){Alignment=StringAlignment.Center, LineAlignment = StringAlignment.Center };
            Font f = new Font(e.CellStyle.Font, FontStyle.Underline);
            e.Graphics.DrawString(e.Value.ToString(), f, new SolidBrush(e.CellStyle.ForeColor), e.CellBounds, sf);
        }
    } 
 private void PaintCellBackground(Graphics g, Color c, Rectangle rect)
    {
        Rectangle topHalf = new Rectangle(rect.Left, rect.Top, rect.Width, rect.Height / 2);
        Rectangle bottomHalf = new Rectangle(rect.Left, topHalf.Bottom, rect.Width, topHalf.Height);
        g.FillRectangle(new SolidBrush(Color.FromArgb(150, c)), topHalf);
        g.FillRectangle(new SolidBrush(c), bottomHalf);
        ControlPaint.DrawBorder(g, rect, Color.Gray, 1, ButtonBorderStyle.Solid, 
                                         Color.Gray, 0, ButtonBorderStyle.Solid, 
                                         Color.Gray, 1, ButtonBorderStyle.Solid, 
                                         Color.Gray, 0, ButtonBorderStyle.Solid);
    }
    //Reset spot when mouse leave
    private void dataGridView_MouseLeave(object sender, EventArgs e)
    {
        spot = Point.Empty;
    }
    //Update spot when mouse move 
    private void dataGridView_MouseMove(object sender, MouseEventArgs e)
    {
        spot = e.Location;
    }

見栄えはよくありませんが、始めるのに役立ちます。デフォルトの背景の方が優れていると思います。その場合は、次のように呼び出すだけです。e.PaintBackground(e.CellBounds, true);

アップデート

カスタム ペイントは、DoubleBuffered コントロールに適用する必要があります。したがって、次のような独自のカスタム DataGridView を作成する必要があると思います (コードが少し増えるだけです)。

public class CustomDataGridView : DataGridView {
    public CustomDataGridView(){
       DoubleBuffered = true;
    }
}
于 2013-06-08T03:48:29.600 に答える