DataGridView に時間のリストを表示していますが、営業時間外の時間に影を付けたいと考えています。CellPainting を使用してこれを実行しようとしていますが、奇妙な結果が得られます。誰かが私がここで間違っていることを説明してもらえますか?
private void dgvItemView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
switch (_formType)
{
case FormType.DayView:
TimeSpan openTime = iFlow.Properties.Settings.Default.BusinessHourOpen;
TimeSpan closeTime = iFlow.Properties.Settings.Default.BusinessHourClose;
DataGridViewCell cell = this.dgvItemView[e.ColumnIndex, e.RowIndex];
if (cell.RowIndex < openTime.Hours || cell.RowIndex > closeTime.Hours)
{
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(25, Color.Red)), e.ClipBounds);
}
break;
}
}
ただし、このコードは次のようにグラデーション効果をもたらします。
私は本当に理解していません。上下にスクロールすると、どれだけスクロールするかに応じて、シェーディングも消えて再表示されます。
だから誰かが私がここで間違っていることを説明してもらえますか? また、営業時間が 08:45 から 17:30 などの時間外の場合に備えて、部分ブロックをペイントする必要があるため、セルの BackColor を変更してこれを実現することはできません。