点击单元格外部,如何将焦点从Infragistics Ultragrid单元格中移除?

3

我在一个 Windows 窗体中使用 infragistics ultragrid 控件。外部有一个“添加新行”按钮,用于向网格中插入新行。

我遇到的问题是,当我在网格内编辑单元格时,点击网格外部的按钮时,单元格不会失去焦点。因此,编辑后的新值没有更新到其基础数据源中。

我需要这个单元格失去焦点并更新其基础数据源,因为“添加新行”按钮会创建一行新记录,并将该特定列具有基于前一行编辑值计算的默认值。

那么,如何使 infragistics ultragrid 单元格失去焦点呢?这种情况可能也适用于普通的 GridView。


1
我不确定是否理解正确,但是当您在网格外单击时,单元格会终止输入模式,并更新底层数据源。这是正常行为,除非您将“UpdateMode”属性设置为“OnUpdate”。您可以检查一下吗? - Steve
感谢@Steve。'UpdateMode'的值设置为'OnCellChangeOrLostFocus'。当单击除“Add New”按钮以外的其他控件时,该单元格将失去焦点。这是一个ToolStripButton。 - Vibgy
那么,@alhalama的回答是正确的。 - Steve
是的,@alhalama的解决方案很好用。我使用了myUltraGrid.ActiveRow.Cells[0].Activate();,也可以正常工作。但我想前一个解决方案更好一些。 - Vibgy
1
@vibgy 我建议的方法是Infragistics推荐的方法,如果ActiveRow不是数据行,它会更好地处理。 - alhalama
2个回答

8
如果您的按钮位于工具栏上,则您所看到的行为是预期的,因为工具栏不会获得焦点。如果是这种情况,在执行逻辑之前,您可以使用网格的PerformAction方法,并传递UltraGridAction.CommitRow来强制提交正在编辑的行的更新。
例如:
this.ultraGrid1.PerformAction(UltraGridAction.CommitRow);

1

我使用了myUltraGrid.ActiveRow.Cells[0].Activate();,这个也可以工作。但是@alhalama的解决方案更好一些,我想。


1
如果ActiveRow为null或者ActiveRow是GroupByRow,这种方法可能会导致NullReferenceException。此外,它会改变网格的活动单元格,而我建议的方法则不会。如果确实是一个不需要焦点的菜单或工具栏,使用我建议的方法,您可以按F2再次进入单元格编辑模式。如果您确实使用了这种方法,以下检查将确保您有一个数据行:if (this.ultraGrid1.ActiveRow != null && this.ultraGrid1.ActiveRow.IsDataRow) {this.ultraGrid1.ActiveRow.Cells[0].Activate();} - alhalama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接