在 DataGridView 中,根据输入的值更改选定的单元格

Posted

技术标签:

【中文标题】在 DataGridView 中,根据输入的值更改选定的单元格【英文标题】:In a DataGridView, change selected cell based on value entered 【发布时间】:2014-02-01 12:26:13 【问题描述】:

在我的 datagridview 中,我有以下列:

零件、描述、销售数量、丢失数量、售价

如果用户在我的 DataGridView 中输入了有效的零件编号,我希望焦点直接移动到已售数量列,以便用户可以输入他们订购的数量。

我意识到这段代码可以改变datagridview中选中的单元格:

dgvPOS.Rows(intCurrentRow).Cells("ordQtySold").Selected = True

但是我应该在datagridview的什么事件下放置这段代码?如果用户键入有效部分然后点击选项卡按钮,我会遇到焦点转到下一列的问题,即描述列,尽管上面提到的代码假设将其移动到已售出的数量列.

我的另一个问题是,如果用户在用户输入有效零件之前单击或尝试使用选项卡或箭头指向已售出的数量列,我希望程序将用户移回零件列单元格。现在我意识到我可以阻止用户转到任何其他单元格,直到使用 CellValidating 事件输入有效部分(e.cancel = true,除非输入有效部分),但是如果没有输入部分编号,而用户是试图移动到具有有效部件信息的上一行,CellValidating 事件下的代码将不起作用,因为当您更改单元格时,CellValidating 事件不知道您尝试更改到哪个单元格......所以这意味着我可以' t 编写代码以考虑用户试图将焦点移动到的位置。我已经在这个问题上工作了整整一周(至少 40 多个小时),请帮忙。

【问题讨论】:

您可以将该代码放在 dataGridView1_CellEndEdit event 中。当单元格编辑完成时触发。 列的顺序是否由任何要求固定?如果没有,您可以重新排序列以使生活更轻松...Part, QtySold, QtyLost, SellPrice, Description 【参考方案1】:

对于第二个问题,

只有当部件号不为空时,您才能设置e.Cancel=true。在 CellValidating 事件处理程序中添加以下代码

if(e.FormattedValue != null && !e.FormattedValue.ToString().IsNullOrEmpty())

      e.Cancel = true;

【讨论】:

以上是关于在 DataGridView 中,根据输入的值更改选定的单元格的主要内容,如果未能解决你的问题,请参考以下文章

winform datagridview 改变某行某列的值 怎么做呢

如何根据条件更改 DataGridView 的行颜色以检查日期是不是过期

对于使用“DataGridView”的 Windows 窗体应用程序,如何检查数据源中的值并更改单独单元格的颜色?

C# SqlCeDataAdapter 在从 datagridview 更改值后调用 Adapter.Update() 时不更新数据库中的值

C#如何获取datagridview最后一行第一列数据的值

根据条件更改 datagridview 单元格颜色