C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DatagridViewのCellPaintingで描画され


(過去ログ 172 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■99157 / inTopicNo.1)  DatagridViewのCellPaintingで描画され
  
□投稿者/ はる (1回)-(2022/02/13(Sun) 15:08:59)

分類:[VB.NET/VB2005 以降] 

Visual Studio2022 で DatagridViewでスケジュール管理のようなものを作成しています。


COL_A --期間
COL_1〜COL_90 --当月1日から90日
COL_SDATE --開始日
COL_EDATE --終了日
以上の項目でDatagridViewを作成します。

COL_SDATEとCOL_EDATEは非表示です。
COL_AにはCOL_SDATEとCOL_EDATEで入力された日付が編集されています。

CellPaintingで開始日〜終了日まで線を引きたいのですが、COL_SDATEを表示にし対象項目とすると
描画できますが、COL_Aを対象項目にすると描画されません。
描画したいセルはCOL_1〜COL_90なのになぜ描画されないのか教えていただけますでしょうか。
よろしくお願いいたします。


'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
''' <summary>グラフの色付け。</summary>
Private Sub DgvDaTa_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DgvData.CellPainting

If e.ColumnIndex < 0 OrElse e.RowIndex < 0 Then Exit Sub

If e.ColumnIndex = DgvData.Columns("COL_SDATE").Index Then
Dim _row As DataGridViewRow = DgvData.Rows(e.RowIndex)

Dim _sDate As DateTime = _row.Cells("COL_SDATE").Value '--開始日
Dim _eDate As DateTime = _row.Cells("COL_EDATE").Value '--終了日
Dim _col As Integer = DateDiff(DateInterval.Day, _dtNow, _sDate)
Dim _cellRect As Rectangle = DgvData.GetCellDisplayRectangle(DgvData.Columns($"COL_{_col:00}").Index, e.RowIndex, True)

Dim _width As Single = _cellRect.Width * (DateDiff(DateInterval.Day, _sDate, _eDate) + 1)
Dim newRect As RectangleF = New RectangleF(_cellRect.X, _cellRect.Y, _width, _cellRect.Height)

e.Graphics.FillRectangle(Color.Red, newRect)
End If

End Su


引用返信 編集キー/
■99158 / inTopicNo.2)  Re[1]: DatagridViewのCellPaintingで描画され
□投稿者/ KOZ (217回)-(2022/02/13(Sun) 18:24:54)
2022/02/13(Sun) 18:50:20 編集(投稿者)

No99157 (はる さん) に返信
> CellPaintingで開始日〜終了日まで線を引きたいのですが、COL_SDATEを表示にし対象項目とすると
> 描画できますが、COL_Aを対象項目にすると描画されません。
> 描画したいセルはCOL_1〜COL_90なのになぜ描画されないのか教えていただけますでしょうか。

「DataGridView.CellPainting イベント」
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridview.cellpainting?view=netframework-4.8

イベントはセルが描画されるタイミングでセルのひとつひとつに対して発生します。
なので、
「e.RowIndex と e.ColumnIndex で示されるセルが開始日と終了日の間だったら、e.CellBounds で示されるセルの表示範囲に線を引く」
というコードを書いてみてください。

引用返信 編集キー/
■99159 / inTopicNo.3)  Re[2]: DatagridViewのCellPaintingで描画され
□投稿者/ はる (2回)-(2022/02/13(Sun) 21:04:59)
2022/02/13(Sun) 22:41:25 編集(投稿者)
2022/02/13(Sun) 22:41:18 編集(投稿者)
No99158 (KOZ さん) に返信
> 2022/02/13(Sun) 18:50:20 編集(投稿者)
>
> 「DataGridView.CellPainting イベント」
> https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridview.cellpainting?view=netframework-4.8
>
> イベントはセルが描画されるタイミングでセルのひとつひとつに対して発生します。
> なので、
> 「e.RowIndex と e.ColumnIndex で示されるセルが開始日と終了日の間だったら、e.CellBounds で示されるセルの表示範囲に線を引く」
> というコードを書いてみてください。
>

ありがとうございました。できました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -