1

我正在该应用程序中开发 xtragridview 控件的应用程序,当我在打开一个弹出表单时双击 xtragridview 中的行时。然后父窗口的焦点发生变化并将焦点分配给另一个窗体 popup 。那时我选择的行改变了它的状态&它从 xtrgridview 中聚焦/选择默认的第一行。但是如果用户将焦点从一个表单更改为另一个弹出表单,我想保持焦点/选定的行。

这个解决方案有什么解决方案吗?我应该为这个问题设置 xtragridview 控件的哪些属性?

谢谢……

4

3 回答 3

2

通常,您使用的方法不需要您编写额外的代码。如果您通过双击网格行打开表单,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;
...
}
于 2011-04-03T12:52:01.003 回答
0

方法一:

在双击事件处理程序中只提到

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 经验建议解决方案。

于 2011-04-02T07:45:37.467 回答
0

我用

 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;
        }
于 2013-06-01T23:40:20.173 回答