C# 如何维护XtraGrid控件的选定行

C# 如何维护XtraGrid控件的选定行,c#,winforms,devexpress,xtragrid,C#,Winforms,Devexpress,Xtragrid,我正在该应用程序中开发xtragridview控件的应用程序,当一个弹出表单打开时,我将双击xtragridview中的行。然后父窗口的焦点改变&焦点被分配给另一个窗体,即弹出窗口。此时,我选择的行改变了它的状态&它的焦点/从xtrgridview中选择默认的第一行。 但如果用户将焦点从一个窗体更改为另一个弹出窗体,我希望保持焦点行/选定行的原样 这个解决方案有什么解决方案吗?我应该为此问题设置xtragridview控件的哪些属性 thanxs 方法1: 在双击事件处理程序中,只需提及 ret

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

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

thanxs

方法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;**

**注意:我从未使用过xdatagrid,但根据我的datagridview经验提出了解决方案。

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

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

2) 重现问题并检查哪一代码强制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;
...
}
公共编辑表单(点位置、GridColumnCollection列、对象数据源、BindingContext上下文) :此(){ StartPosition=FormStartPosition.Manual; 位置=位置; BindingContext=context;//我使用

当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;
        }

我使用GRIDView的双击事件。在这种情况下,它不提供处理的属性。@ PryyChana:添加<代码>返回;< /COD>语句,而不是<代码> E.Reals= true;<代码>上面的代码,以说明它不起作用。因为我使用DATAVIEW作为XStRRID视图的数据源。ticular row那次我更改了dataview的filter row属性。&在我的整个应用程序中使用了相同的dataview。这就是为什么我无法保持所选行的焦点。还有其他想法吗?谢谢你的帮助。你绝对是wright。我正在使用dataview的filterrow属性筛选或插入特定记录来自dataview。谢谢你的帮助。你能建议一些关于你正在使用什么的文档吗?我应该使用什么来代替行过滤器来从dataview中选择特定记录?@priyanka,通常,你应该使用你发布的文章中的方法。在这种情况下,不需要过滤dataview。edi绑定到同一数据源的tor将显示活动记录中的数据,该记录将与“浏览”中的活动记录相对应表单。你是wright,但我想更新我表中的记录,那么我应该如何使用你说的内容来更新记录?@priyanka,看看我发布的代码。DataSource对象被传递到EditForm。因此,如果单击EditForm的“确定”按钮,更改表的行应该不会有问题。
 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;
        }