Windowsforms: Как рисовать линии / бары на DataGridView? - PullRequest
0 голосов
/ 13 июля 2009

Я использую DataGridView в приложении Windows (.NET 3.5), показывающий несколько цветных полос (в основном «задачи во времени»):

DataGridView 1 http://img195.imageshack.us/img195/879/datagridview1.png

Что мне нужно сейчас, так это показать настраиваемую графическую «завершенную» полосу в ячейках в зависимости от процентного значения. Вот фотоделанное изображение:

DataGridView 2 http://img38.imageshack.us/img38/5615/datagridview2.png

Любой намек, как я мог бы подойти к проблеме или найти креативное решение?

Спасибо!

Редактировать: Мне пришлось перерисовать ячейку, потому что она теряется. Вот код (VB.NET), который работает:

Private Sub DataGridView_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView.CellPainting

    If e.ColumnIndex < FIRST_DATA_COLUMN OrElse e.RowIndex < 0 Then Return
    If e.Value Is Nothing Then Return

    Dim BarValue As Integer = DirectCast(e.Value, Integer)
    If BarValue = 0 Then Return

    Dim BackColorBrush As New SolidBrush(e.CellStyle.BackColor)
    Dim GridBrush As New SolidBrush(Me.DataGridView.GridColor)
    Dim GridLinePen As 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 - 1)

    ' -- Paint progress bar
    Dim ProgressBarBrush As New SolidBrush(Color.Green)
    Dim CellProgressBarRect As New Rectangle(e.CellBounds.X, e.CellBounds.Y + CELL_HEIGHT - PROGRESS_BAR_HEIGHT, BarValue, PROGRESS_BAR_HEIGHT)
    e.Graphics.FillRectangle(ProgressBarBrush, CellProgressBarRect)

    e.Handled = True

End Sub

1 Ответ

1 голос
/ 13 июля 2009

Вы должны будете сделать Custom Draw на ячейке. Посмотрите на событие Cell Painting .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...