2009-07-13 23 views
0

私はいくつかのカラーバー(基本的には「時間のタスク」)を示すWindowsアプリケーション(.NET 3.5)でのDataGridViewを使用しています:私は今、必要なものWindowsフォーム:DataGridViewに線や線を描画する方法は?

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

は、カスタムグラフィックを表示するために、ありますパーセンテージ値に応じてセルの「完了」バーを表示します。

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

私は、問題やクリエイティブソリューションに近づく可能性がどのように任意のヒント:ここではフォトショップの画像はありますか?

ありがとうございました!

編集:私はそれを取得しbecuase、セルを再描画しなければならなかった "失われました。"以下は、動作する(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

セルでカスタム描画を行う必要があります。 Cell Paintingイベントをご覧ください。

+0

はい、私はそれをしなければならないと思いました。質問:セルペインティングイベントにカスタムドローイングをすると、通常のレイアウトが失われ、セルを再描画する必要がありますか? – splattne

+0

DataGridViewは、多かれ少なかれ正しいカスタム描画コントロールの1つです。 DataGridViewCellPaintingEventArgsには、WinFormsでセルの特定の部分をペイントするために呼び出すことのできる2つの関数があります。あなたは自分自身の背景だけをペイントすることができます。 – Eric

+0

私は、エリックが、あなたが単にセルの特定のプロパティをオーバーライドできるようにすると述べたので、私はあなたがそうは思わないと思います。 – James

関連する問題