【发布时间】:2013-02-27 15:51:42
【问题描述】:
我有一个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);
}
}
但它仍然显示相同的行为。
【问题讨论】:
-
不能应用行过滤器吗?而不是迭代每一行?或者过滤数据源?
-
数据源是DataSet,不支持过滤,
BindingSource.Filter等不支持位运算符。 -
不能将 DataView 与 DataSet 一起使用吗?
-
@Derek 要么我遗漏了某些东西,要么具有相同的限制,但请参阅编辑,使用 messageBindingSource.Filter 不会改变行为。
标签: c# winforms datagridview