我正在该应用程序中开发 xtragridview 控件的应用程序,当我在打开一个弹出表单时双击 xtragridview 中的行时。然后父窗口的焦点发生变化并将焦点分配给另一个窗体 popup 。那时我选择的行改变了它的状态&它从 xtrgridview 中聚焦/选择默认的第一行。但是如果用户将焦点从一个表单更改为另一个弹出表单,我想保持焦点/选定的行。
这个解决方案有什么解决方案吗?我应该为这个问题设置 xtragridview 控件的哪些属性?
谢谢……
我正在该应用程序中开发 xtragridview 控件的应用程序,当我在打开一个弹出表单时双击 xtragridview 中的行时。然后父窗口的焦点发生变化并将焦点分配给另一个窗体 popup 。那时我选择的行改变了它的状态&它从 xtrgridview 中聚焦/选择默认的第一行。但是如果用户将焦点从一个表单更改为另一个弹出表单,我想保持焦点/选定的行。
这个解决方案有什么解决方案吗?我应该为这个问题设置 xtragridview 控件的哪些属性?
谢谢……
通常,您使用的方法不需要您编写额外的代码。如果您通过双击网格行打开表单,XtraGrid 不会重置其 FocusedRow。所以,我建议你确定这种行为的原因。这可以通过使用以下方法来完成:
1) 处理 GridView 的 FocusedRowChanged 事件并在其中设置断点。
2) 重现问题并检查哪些代码强制 gridView 聚焦第一行。
这应该可以说明为什么会发生这种情况。
另外,我建议您查看如何创建 PopupForm 以在 GridView 中编辑行并根据列编辑器自动创建编辑器。实现所需功能的示例。
我想我知道这个问题的原因。它出现是因为您正在更改 DataView 的 RowFilter 属性。我想你希望你的编辑指向被点击的记录。最好的解决方案是不过滤 DataView,而是分配 BindingContext,就像在上面的示例中所做的那样。这是其中的代码:
public EditForm(Point location, GridColumnCollection columns, object dataSource, BindingContext context)
: this() {
StartPosition = FormStartPosition.Manual;
Location = location;
BindingContext = context; // <<<<<<
allowTrackValueChanges = false;
this.dataSource = dataSource;
...
}
方法一:
在双击事件处理程序中只提到
return;
在完成所有流程(打开另一个表格等)之后。
在更好地理解您的问题后,我建议尝试方法 2,我希望它确实有效。
方法二:
在打开另一个表单或对话框之前首先记录当前选定的索引..
int index = datagridview.SelectedRows[0].Index; //or xdatagrid.SelectedRows[0].Index;**
然后在完成表单打开或其他程序后添加以下行
datagridview.Rows[index].Selected = true; //or xdatagrid.Rows[index].Selected = true;**
**注意:我从未使用过 xdatagrid,但根据我的 datagridview 经验建议解决方案。
我用
GridView view = (GridView) sender;
Point pt = view.GridControl.PointToClient(Control.MousePosition);
var info = DoRowDoubleClick(view, pt);
当 DoRowDoubleClick 是:
private static GridHitInfo DoRowDoubleClick(GridView view, Point pt) {
GridHitInfo info = view.CalcHitInfo(pt);
if (info.InRow || info.InRowCell){
string colCaption = info.Column == null ? "N/A" : info.Column.GetCaption();
MessageBox.Show(string.Format("DoubleClick on row: {0}, column: {1}.", info.RowHandle, colCaption));
return info;
}
return null;
}