2011-04-02 57 views
1

我正在開發應用程序中的xtragridview控件,當我雙擊xtragridview時,一個彈出窗體打開的行。那麼父窗口的焦點變化&焦點被分配給彈出的另一個表單。那段時間我選擇的行改變它的狀態&它關注/從xtrgridview中選擇默認的第一行。 但我想保持焦點/選定的行,因爲它是如果用戶更改焦點從一個窗體到另一個彈出窗體。如何維護選定的XtraGrid控件行

該解決方案是否有解決方案?我應該爲這個問題設置xtragridview控件的屬性?

thanxs .....

回答

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; 
... 
} 
+0

你絕對是賴特。我正在使用dataview的filterrow屬性來過濾或從dataview中提取perticular記錄。謝謝你的幫助。你能建議一些關於你是什麼東西的文檔嗎? – priyanka 2011-04-08 12:04:09

+0

我應該用什麼來代替Row filter來從dataview中選擇特定的記錄? – priyanka 2011-04-08 12:14:42

+0

@priyanka,一般來說,你應該使用你發佈的文章中的方法。在這種情況下,不需要過濾DataView。綁定到相同數據源的編輯器將顯示活動記錄中的數據,並且該記錄將與「瀏覽」表單中的活動記錄相對應。 – 2011-04-08 12:25:10

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

**注:我從來沒有使用xdatagrid,但建議取決於我的datagridview經驗的解決方案。

+0

我用GridView的雙擊事件 - 在這種情況下,不提供Handled屬性。還有其他解決方案嗎? – priyanka 2011-04-02 09:38:55

+0

@priyanka:添加'return;'語句而不是'e.Handled = true;' 請參閱上面的代碼清晰 – Marshal 2011-04-03 08:14:21

+0

它不起作用。因爲我使用dataview作爲xtragrid視圖的數據源,當用戶雙擊特定行時,我改變了dataview的過濾器行屬性。在我的整個應用程序中使用相同的數據視圖。這就是爲什麼我無法保持選定行的焦點。有沒有其他的想法?感謝您的幫助。 – priyanka 2011-04-03 11:26:40

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; 
     } 
相關問題