我正在開發應用程序中的xtragridview控件,當我雙擊xtragridview時,一個彈出窗體打開的行。那麼父窗口的焦點變化&焦點被分配給彈出的另一個表單。那段時間我選擇的行改變它的狀態&它關注/從xtrgridview中選擇默認的第一行。 但我想保持焦點/選定的行,因爲它是如果用戶更改焦點從一個窗體到另一個彈出窗體。如何維護選定的XtraGrid控件行
該解決方案是否有解決方案?我應該爲這個問題設置xtragridview控件的屬性?
thanxs .....
我正在開發應用程序中的xtragridview控件,當我雙擊xtragridview時,一個彈出窗體打開的行。那麼父窗口的焦點變化&焦點被分配給彈出的另一個表單。那段時間我選擇的行改變它的狀態&它關注/從xtrgridview中選擇默認的第一行。 但我想保持焦點/選定的行,因爲它是如果用戶更改焦點從一個窗體到另一個彈出窗體。如何維護選定的XtraGrid控件行
該解決方案是否有解決方案?我應該爲這個問題設置xtragridview控件的屬性?
thanxs .....
通常,您使用的方法不需要您編寫額外的代碼。如果通過雙擊網格行打開表單,則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;
...
}
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;**
**注:我從來沒有使用xdatagrid,但建議取決於我的datagridview經驗的解決方案。
我用GridView的雙擊事件 - 在這種情況下,不提供Handled屬性。還有其他解決方案嗎? – priyanka 2011-04-02 09:38:55
@priyanka:添加'return;'語句而不是'e.Handled = true;' 請參閱上面的代碼清晰 – Marshal 2011-04-03 08:14:21
它不起作用。因爲我使用dataview作爲xtragrid視圖的數據源,當用戶雙擊特定行時,我改變了dataview的過濾器行屬性。在我的整個應用程序中使用相同的數據視圖。這就是爲什麼我無法保持選定行的焦點。有沒有其他的想法?感謝您的幫助。 – priyanka 2011-04-03 11:26:40
我用
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;
}
你絕對是賴特。我正在使用dataview的filterrow屬性來過濾或從dataview中提取perticular記錄。謝謝你的幫助。你能建議一些關於你是什麼東西的文檔嗎? – priyanka 2011-04-08 12:04:09
我應該用什麼來代替Row filter來從dataview中選擇特定的記錄? – priyanka 2011-04-08 12:14:42
@priyanka,一般來說,你應該使用你發佈的文章中的方法。在這種情況下,不需要過濾DataView。綁定到相同數據源的編輯器將顯示活動記錄中的數據,並且該記錄將與「瀏覽」表單中的活動記錄相對應。 – 2011-04-08 12:25:10