gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:16:34 24 4
gpt4 key购买 nike

考虑绑定(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com