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