【问题标题】:DataView RowFilter is not giving proper resultsDataView RowFilter 没有给出正确的结果
【发布时间】:2012-08-22 12:04:07
【问题描述】:

我正在使用数据网格视图来显示 1000 行和 800 列数据(每个单元格只有一个字符)。还有一个复选框列。我添加了一个上下文菜单项,例如“查看选定的单元格”。点击那个我试图只显示选中的行。对于之前的那个,我通过循环遍历每个行将未选中行的Visible 属性设置为False。这要花很多时间。

所以我尝试通过应用RowFilter 来使用DataView 控制。它看起来有些快但是。但是有些选中的行是不可见的。

例如如果我有 10 行,则检查其中的 5 行。然后只有 4 行可见。实际上它应该显示 5 行被选中。

我试过这些东西

  1. dView.RowFilter="CheckBoxCol";
  2. dView.RowFilter="CheckBoxCol=true";

这两件事我都遇到了同样的问题。谁能帮我解决这个问题?

【问题讨论】:

  • 您的数据视图控件是否有底层绑定数据源(例如数据表、对象列表)或者您是否手动填充数据网格?
  • 您显示的两个选项都应该可以正常工作 - 我已经根据我能想到的唯一原因提供了答案。如果我的猜测是错误的,请提供有关如何重现此问题的详细信息。最好使用最小解决方案的代码。

标签: c# winforms datagridview dataview rowfilter


【解决方案1】:

您展示的这两种方法都将作为布尔列上的RowFilter 工作。

您很可能遇到了 DataGridView 处理编辑的方式的问题 - 在当前编辑单元格失去焦点之前,它们不会提交到底层数据源,并且是显示上下文的最常见方式网格上的菜单,单元格不会失去焦点。

也就是说,如果你显示你的上下文菜单做这样的事情:

void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {            
        contextMenuStrip1.Show(dataGridView1, e.Location);
    }
}

那么您最近更改的复选框不会将其更改刷新到数据视图。

解决方案分为两部分。首先,您需要引入一个位于数据视图和数据网格之间的绑定源。

bindingSource1.DataSource = dView;
dataGridView1.DataSource = bindingSource1;

然后您需要将以下代码添加到数据网格视图上的“CurrentCellDirtyStateChanged”处理程序中:

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

最后,在您应用过滤器的代码中,您还需要在绑定源上调用EndEdit

private void filterToolStripMenuItem_Click(object sender, EventArgs e)
{
    bs.EndEdit();
    dvSections.RowFilter = "CheckBoxCol";
}

在我之前的经验中,绑定源不是必需的,但我还没有尝试过将上下文菜单和数据视图完全混合,当我尝试时发现需要bs.EndEdit()

【讨论】:

    【解决方案2】:

    我认为 David Hall 是正确的(抱歉,我没有足够的分数来评论 - 这就是我打算在这里做的)

    如果可能,请在数据网格视图的基础源表上尝试 Table.AcceptChanges。

    这应该将任何挥之不去的更改提交给表,然后提交给 DGV

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多