我有一个DataGridView
,我有选择地(迭代地)隐藏行,使用row.Visible
:
void UpdateMessageWindow()
{
MessageDataGridView.CurrentCell = null;
foreach (DataGridViewRow row in MessageDataGridView.Rows)
{
row.Visible = DisplayedLevels.HasFlag((MessageLevel)row.Cells[3].Value);
}
}
我遇到的问题是,在添加行之后,在您单击单元格(重绘单击的单元格),按键或隐藏窗口之前,它们不会被重新绘制。如果将鼠标移到DGV上,当光标改变时,您可以看到它们存在。
我非常确定我已经在DataGridView上尝试了相关声音方法的所有组合,但没有任何帮助。
修改
我已修改它以使用BindingSource.Filter,通过添加" Visible"列到DataSet表,设置messageBindingSource.Filter = "Visible"
,并将UpdateOutput重写为
void UpdateOutputWindow()
{
foreach (JobDataSet.MessagesRow row in _dataSet.Messages)
{
row.Visible = DisplayedLevels.HasFlag(row.Level);
}
}
但它仍然表现出相同的行为。
答案 0 :(得分:0)
尝试将DataGridView聚焦于:
MessageDataGridView.Focus();
答案 1 :(得分:0)
我发现答案是为DataTable.RowChanged
事件添加处理程序:
_dataSet.Messages.RowChanged += delegate
{
MessageDataGridView.Invalidate();
MessageDataGridView.Update();
};
这可能效率低下,但确实有效。