c# - 如何阻止带有过滤器集的 DataGridView 在列表中移动得太远?

标签 c# winforms .net-3.5 datagridview filter

考虑绑定(bind)到某个数据库的 dataGridView。 dataGridView 的绑定(bind)源有一个过滤器,它只会显示描述字段为空的地方。

想法是用户只会看到具有此值的记录,需要他们注意的记录。用户总是会将该值更改为其他值。

我的问题是,一旦他们通过 enter 或 tab 键移动到下一行,它几乎在他们移动到下一行后进行过滤,将其位置移动到它们应该在的下一行。

有没有办法控制这种行为,以便在过滤发生后位置不会跳到下一行?尽管我知道这是一个解决方案,但我不想针对这个特定问题对数据集进行单独填充。如果可能的话,我想知道如何更好地控制过滤。

编辑

值得注意的是,我没有将任何事件连接到 datagridview,这是将控件拖到窗体上、从数据集中将绑定(bind)源连接到它并填充数据集的开箱即用行为在 form_load 事件上。

编辑

当前行为示例 - (C) 表示光标位置

用户在第 2 行键入一个名称并将状态设置为 TRUE

R1 - John Doe     FALSE
R2 - Jane Doe     TRUE (C)
R3 - Rob  Doe     FALSE
R4 - Joe  Doe     FALSE

用户按下回车键(或 Tab 键,哪个并不重要,对于这个例子是回车...)

R1 - John Doe     FALSE 
R3 - Rob  Doe     FALSE 
R4 - Joe  Doe     FALSE (C)

当前选定的行现在是第 4 行,而它实际上应该是第 3 行。如果我没有将 R2 的值从 false 更改为 true,它就不会进行过滤,并且会正确地将我移动到第 3 行

编辑

起死回生,因为我还没有收到解决这个问题的合适方法。那里有人有创意吗? ^_^

最佳答案

我刚才在 DataGridView 上遇到了同样的问题。
我想更改 Enter 键的行为以将选定的行向上而不是向下移动。以上是我的做法,希望对你有帮助。我制作了一个继承 DataGridView 的控件,并覆盖了 ProcessCmdKey 并在其中进行了更改。在你的情况下你想要做的是:

public partial class MyDataGridView : DataGridView
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Tab || keyData == Keys.Enter)
        {
            return true;
        }

        return base.ProcessCmdKey(ref msg, keyData);
    }
}

这将阻止 gridView 在按 Enter 或 Tab 时移动到下一行。我希望它对你有用,如果没有请说出问题是什么。

关于c# - 如何阻止带有过滤器集的 DataGridView 在列表中移动得太远?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6461150/

相关文章:

c# - 从 .NET 中控制 Opera Driver

.net - 为什么在我的面向 .net framework 3.5 的 .net 项目中 System.dll 的版本是 2.x?

c# - 更改 System.Globalization.NumberFormatInfo 中的货币符号位置

c# - 检查javascript的完整性,用户代码=服务器代码

c# - 使用 Console.CursorLeft 进行控制台重定向

c# - 将服务引用添加到 WinForm 项目时出错

c# - 是否有用于获取原始 Properties.Settings 的 API?

c# - .NET 3.5应用程序上的.NET Runtime 2.0错误

c# - 带有 "specified"标志的值对象

c# - directshow.net 网络摄像头覆盖透明面板