DataGridView没有被重新绘制

本文关键字:绘制 新绘制 DataGridView | 更新日期: 2023-09-27 18:01:19

我有一个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。过滤器,通过在DataSet Table中添加一个"Visible"列,设置messageBindingSource.Filter = "Visible",并将UpdateOutput重写为

void UpdateOutputWindow() 
{
    foreach (JobDataSet.MessagesRow row in _dataSet.Messages)
    {
        row.Visible = DisplayedLevels.HasFlag(row.Level);
    }
}

但是它仍然显示相同的行为

DataGridView没有被重新绘制

尝试使用:

聚焦数据视图
MessageDataGridView.Focus();

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

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