投稿者 るきお  (社会人) 投稿日時 2009/11/2 02:43:59
こんにちは。


こんな感じです。

>国語と表示した上に4/5塗りつぶすことは可能でしょうか。
>(同セル上に文字と塗りつぶしをしたい場合)


  
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

        Dim table As New DataTable
        table.Columns.Add("科目"GetType(String))
        table.Columns.Add("点数"GetType(Integer))

        table.Rows.Add("国語", 80)
        table.Rows.Add("数学", 30)
        table.Rows.Add("英語", 50)

        DataGridView1.DataSource = table


    End Sub

    Private Sub DataGridView1_CellPainting(ByVal sender As System.ObjectByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting

        If e.ColumnIndex = 0 AndAlso e.RowIndex >= 0 Then
            '点数取得 
            Dim pointColumnValue As Object = DataGridView1.Rows(e.RowIndex).Cells("点数").Value
            Dim point As Integer

            If IsDBNull(pointColumnValue) Then
                Return
            Else
                point = DataGridView1.Rows(e.RowIndex).Cells(1).Value
            End If

            '▼描画 


            '背景描画 
            e.PaintBackground(e.CellBounds, e.State = DataGridViewElementStates.Selected)

            '点数分の赤い棒を描画 
            Dim BarRect As Rectangle = e.CellBounds
            BarRect.Width = BarRect.Width * (point / 100)
            e.Graphics.FillRectangle(Brushes.Red, BarRect)

            '科目名描画 
            e.Graphics.DrawString(e.Value, DataGridView1.Font, Brushes.Black, e.CellBounds)

            '▲ 

            e.Handled = True

        End If

    End Sub


オーナー描画の技法では書きたいものは全部自分で書きます。
この例では「▼描画」から「▲」の部分までが実際に描画している部分で、
この部分にe.Graphicsを使って書いたものが表示されます。

円でも三角でも画像でもe.Graphicsを使って書けば自由にカスタマイズできますので、いろいろ遊んでみてください。