مشاركة عبر


كيفية القيام بما يلي: تخصيص مظهر الخلايا الموجودة في عنصر تحكم DataGridView الخاص بـ Windows Forms

يمكنك تخصيص مظهر أي خلية عن طريق معالجة حدث CellPainting الخاص بعنصر تحكم DataGridView. يمكنك فك ضغط DataGridView عن عنصر تحكم Graphics من خاصية Graphics الخاصة بـ DataGridViewCellPaintingEventArgs. مع Graphics، يمكن أن تؤثر على مظهر عنصر تحكم DataGridView بالكامل, ولكن سوف تحتاج عادة لتؤثر على مظهر الخلية التي هي حالياً قيد التلوين. تسمح لك خاصية ClipBounds الخاصة بـ DataGridViewCellPaintingEventArgs من تقييد عمليات الرسم الخاص بك للخلية التي يتم تلوينها حالياً.

في مثال التعليمة البرمجية التالي, سوف تقوم بتلوين كل الخلايا في ContactName باستخدام عمود نظام ألوان DataGridView الخاص بعنصر التحكم. يتم تلوين محتوى كل خلية على نص في Crimson، ثم يتم رسم مستطيل داخلي في نفس لون خاصية GridColor الخاصة بعنصر تحكم DataGridView.

مثال

Private Sub dataGridView1_CellPainting(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _
    Handles dataGridView1.CellPainting

    If Me.dataGridView1.Columns("ContactName").Index = _
        e.ColumnIndex AndAlso e.RowIndex >= 0 Then

        Dim newRect As New Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, _
            e.CellBounds.Width - 4, e.CellBounds.Height - 4)
        Dim backColorBrush As New SolidBrush(e.CellStyle.BackColor)
        Dim gridBrush As New SolidBrush(Me.dataGridView1.GridColor)
        Dim gridLinePen As New Pen(gridBrush)

        Try

            ' Erase the cell.
            e.Graphics.FillRectangle(backColorBrush, e.CellBounds)

            ' Draw the grid lines (only the right and bottom lines;
            ' DataGridView takes care of the others).
            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, _
                e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, _
                e.CellBounds.Bottom - 1)
            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, _
                e.CellBounds.Top, e.CellBounds.Right - 1, _
                e.CellBounds.Bottom)

            ' Draw the inset highlight box.
            e.Graphics.DrawRectangle(Pens.Blue, newRect)

            ' Draw the text content of the cell, ignoring alignment.
            If (e.Value IsNot Nothing) Then
                e.Graphics.DrawString(CStr(e.Value), e.CellStyle.Font, _
                Brushes.Crimson, e.CellBounds.X + 2, e.CellBounds.Y + 2, _
                StringFormat.GenericDefault)
            End If
            e.Handled = True

        Finally
            gridLinePen.Dispose()
            gridBrush.Dispose()
            backColorBrush.Dispose()
        End Try

    End If

End Sub
private void dataGridView1_CellPainting(object sender,
System.Windows.Forms.DataGridViewCellPaintingEventArgs e)
{
    if (this.dataGridView1.Columns["ContactName"].Index ==
        e.ColumnIndex && e.RowIndex >= 0)
    {
        Rectangle newRect = new Rectangle(e.CellBounds.X + 1,
            e.CellBounds.Y + 1, e.CellBounds.Width - 4,
            e.CellBounds.Height - 4);

        using (
            Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),
            backColorBrush = new SolidBrush(e.CellStyle.BackColor))
        {
            using (Pen gridLinePen = new Pen(gridBrush))
            {
                // Erase the cell.
                e.Graphics.FillRectangle(backColorBrush, e.CellBounds);

                // Draw the grid lines (only the right and bottom lines;
                // DataGridView takes care of the others).
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                    e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom - 1);
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                    e.CellBounds.Top, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom);

                // Draw the inset highlight box.
                e.Graphics.DrawRectangle(Pens.Blue, newRect);

                // Draw the text content of the cell, ignoring alignment.
                if (e.Value != null)
                {
                    e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
                        Brushes.Crimson, e.CellBounds.X + 2,
                        e.CellBounds.Y + 2, StringFormat.GenericDefault);
                }
                e.Handled = true;
            }
        }
    }
}

التحويل البرمجي للتعليمات البرمجية

يتطلب هذا المثال:

  • عنصر تحكم DataGridView المسمى dataGridView1 مع عمود ContactName مثل تلك الموجودة في جدول العملاء في نموذج قاعدة البيانات Northwind.

  • مراجع عن تجميعات النظام ,System.Windows.Forms, و System.Drawing.

راجع أيضًا:

المرجع

DataGridView

CellPainting

موارد أخرى

تخصيص عنصر تحكم نماذج DataGridView Windows