DataGridView没有被重新绘制

时间:2013-02-27 15:51:42

标签: c# winforms datagridview

我有一个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);
    }
}

但它仍然表现出相同的行为。

2 个答案:

答案 0 :(得分:0)

尝试将DataGridView聚焦于:

MessageDataGridView.Focus();

答案 1 :(得分:0)

我发现答案是为DataTable.RowChanged事件添加处理程序:

_dataSet.Messages.RowChanged += delegate
                                {
                                    MessageDataGridView.Invalidate();
                                    MessageDataGridView.Update();
                                };

这可能效率低下,但确实有效。