|
■No76150 (魔界の仮面弁士 さん) に返信
有難う御座います。とても助かりました。 まさか左右のスクロールの方向まで考慮が必要とは思いませんでした。
>見ると、最初の質問コードに、RowIndex 判定のコードが無いですね。 >もしかして明細の最初の「2行」ではなく、「2列」の間違いだったのでしょうか。
最初の2行、上の横並びのヘッダータイトルのつもりなのですが。 判定コードはこれじゃないのでしょうか。
' 行・列共にヘッダは処理しない If e.RowIndex < 0 OrElse e.ColumnIndex < 0 OrElse e.RowIndex <> 0 Then Return End If
魔界の仮面弁士様のサンプルを参考に変更したところヘッダーが固定できました。 以前のように左右のスクロールで罫線が変わることはなくなりました。
もう一つお願いなのですが上2行ヘッダーの1行目と2行目の罫線が出ません。 試行錯誤していますが、よろしければアドバイスをお願いできないでしょうか。
下記コードに変更しました。
Private Sub DataGridView_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView.CellPainting Dim dgv As DataGridView dgv = DataGridView ' 行・列共にヘッダは処理しない If e.RowIndex < 0 OrElse e.ColumnIndex < 0 OrElse e.RowIndex <> 0 Then Return End If
Dim margeLeft = e.CellBounds.Right - 1 Dim colIndex As Integer
For colIndex = e.ColumnIndex To 0 Step -1 margeLeft -= dgv.Columns(colIndex).Width If colIndex = 3 OrElse colIndex = 9 OrElse colIndex = 15 OrElse colIndex = 21 Then Exit For End If Next Dim margeRight = e.CellBounds.Left For colIndex = e.ColumnIndex To dgv.ColumnCount - 1 margeRight += dgv.Columns(colIndex).Width If colIndex = 8 OrElse colIndex = 14 OrElse colIndex = 20 OrElse colIndex = 24 Then Exit For End If Next Dim cellRect As New Rectangle(margeLeft, e.CellBounds.Top, margeRight - margeLeft, e.CellBounds.Height) Dim cellBrush As New SolidBrush(e.CellStyle.BackColor) Dim cellPen As New Pen(dgv.GridColor)
e.Graphics.FillRectangle(cellBrush, cellRect) e.Graphics.DrawRectangle(cellPen, cellRect) TextRenderer.DrawText(e.Graphics, e.FormattedValue.ToString(), e.CellStyle.Font, cellRect, e.CellStyle.ForeColor, TextFormatFlags.HorizontalCenter Or TextFormatFlags.VerticalCenter) e.Handled = True
cellBrush.Dispose() cellPen.Dispose()
End Sub
|