我有一个代码片段,但它不能很好地工作,为什么?
1 -当启动应用程序时,它正在将所有记录都涂成粉红色,只有当我选择所有已涂的记录时,它才会再次正常工作。
2 -当选择两个或多个单元格,然后只选择其中一个选定单元格时,线条绘制失败。
我希望使用selecionMode = CellSelect和multiSelect = true属性绘制选定单元格的整行,以便在选择一个或多个单元格时绘制相应的行。what i want to happen
private void DataGridView1_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
var dataGrid = (DataGridView)sender;
var s = e.StateChanged;// = DataGridViewElementStates.Selected;
if (e.Cell.RowIndex > -1)
{
DataGridViewRow row = dataGrid.Rows[e.Cell.RowIndex];
if (e.Cell.Selected)
{
row.DefaultCellStyle.BackColor = Color.Pink;
}
else if (!e.Cell.Selected)
{
row.DefaultCellStyle.BackColor = Color.White;
}
}
}
1条答案
按热度按时间zrfyljdw1#
我知道在加载数据时所有行都被选中,这只是从包含的数据中选择所有行。此时,没有“取消选择”,所以它会绘制所有行。
我用下面的方法解决了这个案子:
在加载数据之前禁用网格:
在线条绘制过程中,我验证网格是否启用,以了解它在加载数据时的状态:
最后,我在“dataGridView1_Paint”事件中再次启用网格:
一个重要的细节是“Paint”事件一直被调用,使得网格不可能在以后在业务模型中被禁用。如果没有这种可能性,流程将完美地工作。这是我找到的唯一方法。