كيفية القيام بما يلي: تخصيص مظهر الخلايا الموجودة في عنصر تحكم 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.