我在该应用程序中开发了一个xtragridview控件的应用程序,当我打开一个弹出窗体时双击xtragridview中的行。然后父窗口的焦点改变&焦点被分配给弹出窗口的另一个窗体。那个时候我选择的行改变了它的状态&它从xtrgridview中聚焦/选择默认的第一行。 但是如果用户将焦点从一个表单更改为另一个表单,我想保持焦点/选定的行。
这个解决方案有什么解决方案吗?我应该为这个问题设置xtragridview控件的哪些属性?
thanxs .....
答案 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;
}