0

我有一个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,通过在 DataSet 表中添加“可见”列、设置messageBindingSource.Filter = "Visible"并将 UpdateOutput 重写为

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

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

4

2 回答 2

0

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

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

它可能效率低下,但它有效。

于 2013-02-28T10:07:13.153 回答
0

尝试使用以下方法聚焦 DataGridView:

MessageDataGridView.Focus();
于 2013-02-27T16:03:35.443 回答