如何维护选定的XtraGrid控件行

时间:2011-04-02 07:41:23

标签: c# winforms devexpress xtragrid

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

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

thanxs .....

3 个答案:

答案 0 :(得分:2)

通常,您使用的方法不需要您编写其他代码。如果通过双击网格行打开表单,XtraGrid不会重置其FocusedRow。所以,我建议你确定这种行为的原因。这可以通过使用以下方法来完成:

1)处理GridView的FocusedRowChanged事件并在其中设置断点。

2)重现问题并检查哪个代码强制gridView聚焦第一行。

这应该可以解释为什么会发生这种情况。

另外,我建议您查看实现所需功能的How to create the PopupForm for editing rows in the GridView and automatically create editors based on the column editors.示例。

我想我知道这个问题的原因。看来是因为您正在更改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;
...
}

答案 1 :(得分:0)

Mehod 1:

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

return;

完成所有流程(打开另一个表格等)后。

在更好地理解你的问题后,我建议尝试方法2 我希望它确实有效。

方法2:

首先记录当前所选索引,然后再打开另一个表格或对话框。

int index = datagridview.SelectedRows[0].Index;  //or xdatagrid.SelectedRows[0].Index;**

然后在完成表格打开或其他程序后添加以下行

datagridview.Rows[index].Selected = true; //or xdatagrid.Rows[index].Selected = true;**

** N.B。:我从未使用xdatagrid,但根据我的datagridview经验建议解决方案。

答案 2 :(得分: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;
        }