考虑绑定到某个数据库的dataGridView。 dataGridView的绑定源有一个过滤器,它只显示描述字段为空的位置。
这个想法是用户只会看到具有此值的记录,这些记录需要他们注意。用户将始终将该值更改为其他值。
我的问题是,一旦他们通过enter或tab键移动到下一行,它几乎在他们移动到下一行后过滤,将其位置移动到下面的行所在的位置。
有没有办法控制此行为,以便在发生过滤后位置不会跳到下一行?我不想在这个特定问题的数据集上单独填写,但我知道这是一个解决方案。我想知道如何更好地控制过滤。
修改的
值得注意的是,我没有将任何事件连接到datagridview,这是将控件拖到窗体上,从数据集连接到它的绑定源,并填充数据集的开箱即用行为在form_load事件上。
修改的
当前行为示例 - (C)表示光标位置
用户键入第2行中的名称并将状态设置为TRUE
R1 - John Doe FALSE
R2 - Jane Doe TRUE (C)
R3 - Rob Doe FALSE
R4 - Joe Doe FALSE
用户按下返回(或选项卡,无论哪个,对于此示例,其输入...)
R1 - John Doe FALSE
R3 - Rob Doe FALSE
R4 - Joe Doe FALSE (C)
当前选中的行现在是第4行,它实际上应该是第3行。如果我没有将值从false更改为true,则它不会被过滤,并且会将我正确地移动到第3行
修改的
因为我没有得到合适的解决方案来解决这个问题,所以从死里复活。那里有人有创意吗? ^ _ ^
答案 0 :(得分:1)
我前一段时间与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);
}
}
按Enter或Tab键时,这将停止gridView移动到下一行。我希望它对你有用,如果不能说出来是什么问题。