我在DataGridView中顯示小時數列表,並希望遮蔽那些在工作時間之外的小時。我正在嘗試使用CellPainting來做到這一點,但是我得到了奇怪的結果。有人能解釋我在這裏做錯了嗎?DGV 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來實現這一點。
謝謝,我以爲我找了一個單元格邊界,但顯然不是很好。我已將其更改爲CellBounds,並且現在完全沒有紅細胞,儘管它們在滾動時偶爾閃爍紅色。我也檢查過這個代碼只是被調用一次,它就是這樣。就好像另一個事件正在重新繪製細胞? – CrazyHorse
@CrazyHorse請參閱編輯。 – Rotem
完美,非常感謝您的幫助! – CrazyHorse