2016-11-15 44 views
1

我的DataGridView包含〜200行,每行包含一些用戶信息(如Last name)。當用戶選擇這些行中的任何一行時,我需要檢索選定行的ID以便查詢我的數據庫以獲取更多信息。因此,當用戶選擇一行時,我遍歷整個列表,直到找到匹配的ID。下面是可視化什麼,我說的是代碼:現在哪個DataGridView事件在一行被選中後調用

if (e.RowIndex > -1) 
{ 
    int selectedId = Convert.ToInt32(dataGridView.Rows[e.RowIndex].Cells["IdColumn"].Value); 
    foreach (var user in Users) 
     if (user.Id == selectedId) 
     { 
      SelectedUser = GetUserById(user.Id); 
      break; 
     } 
} 

,我使用的是這裏的事件是DataGridView.RowEnter,這是一個問題,因爲即使在列表加載的第一次,因此該事件觸發至少執行100次以上的循環執行foreach
所以問題是:我應該使用哪個事件,以便上面的代碼只在選中某行後執行一次?

+1

唐直到您加載數據後纔會連接事件。 – LarsTech

+0

到目前爲止,這是最好的選擇,可惜你沒有發佈那個答案讓我接受 – user6807975

回答

1

最可行的選擇,在註釋中提出@LarsTech:連接所有數據被加載後,方可事件。而且,由於我的數據被加載後進行排序,我執行這樣的:

private void dataGridView_Sorted(object sender, EventArgs e) 
    { 
     this.dataGridView.SelectionChanged -= new System.EventHandler(this.dataGridView_SelectionChanged); 
     this.dataGridView.SelectionChanged += new System.EventHandler(this.dataGridView_SelectionChanged); 
    } 

(我也被@Karthik提供的代碼,以使事件SelectionChanged爲基礎的的RowEnter基代替)

+1

首先調用'this.dataGridView.SelectionChanged - = this.dataGridView_SelectionChanged;',否則每次網格排序時都要添加多個事件處理程序。一旦數據實際加載到網格中,最好實際上只附加處理程序。 – LarsTech

1

這裏是你的問題的解決方案,你可以使用下面的事件來選擇行,有效地做我們想要的,我已經根據你的代碼發佈了一個例子,以便更好地理解。

例子:

private void dataGridView_SelectionChanged(object sender, EventArgs e) 
    { 
    DataGridView gv = sender as DataGridView; 
    if (gv != null && gv.SelectedRows.Count > 0) 
     { 
     DataGridViewRow row = gv.SelectedRows[0]; 
     if (row != null) 
      { 
      if(Convert.ToInt32(row.Cells["IdColumn"].Value)==user.Id) 
       { 

         //do whatever we want 

       } 

      } 
     } 
    } 

希望它肯定會有所幫助,請讓我知道是否有進一步的澄清或疑慮。歡樂共享

感謝 KARTHIK

+0

不幸的是,最終結果與DataGridView.RowEnter相同,SelectionChanged在加載列表時被激發多次首次。 – user6807975

+0

@ user6807975終於有了解決方案? –

1

KARTHIK埃盧馬萊剛拿到第一,但只是點他解掉: 您使用

public event DataGridViewCellEventHandler RowEnter 

在最初裝在DataGridView發生此事件,以及就像用戶選擇除當前行之外的行一樣。

msdn Documentation for rowenter

你解釋的行爲正是此事件的彌補。 所以你最好從KARTHIK埃盧馬萊建議嘗試:每當細胞選擇或選擇被解除的,無論是編程方式或通過用戶動作發生

public event EventHandler SelectionChanged 

此事件。例如,當您想要顯示當前所選單元格的總和時,此事件很有用。

msdn Documentation for selectionchanged

相關問題