2012-12-05 75 views
1

我有一個Windows窗體DataGridView,顯示在一個類中註冊的學生列表。 DataGridView中的組合框列顯示了學生可以移動到的其他類的列表。ComboBox選擇索引更改時刷新Windows窗體DataGridView

如果用戶使用組合框選擇不同的類,然後在DataGridView中選擇不同的行,那麼剛剛編輯的行將從DataGridView中正確刪除,因爲它不再符合條件。

我的問題是,當用戶從組合框中選擇新值而不等待用戶選擇另一行時,我需要這種情況發生。原因是,如果在用戶選擇另一行之前未刪除該行,則行向上移動以填充被刪除的行留下的空白,使當前選定的行低於用戶選擇的行,可能會引起混淆用戶。

我已經嘗試調用DataGridView的Refresh方法,但編輯的行仍然不會被刪除,直到用戶選擇另一行。

+0

仍在尋找解決方案。如果我不能立即刪除不再符合標準的行,在用戶更改選擇之前,我很樂意解決它,直到用戶單擊保存按鈕才能刪除它。 –

+0

您目前只能看到14個視圖。您可以通過更好的標籤獲得更多。這是C#還是VB.NET?您定位哪個.NET Framework版本? –

+0

謝謝。我添加了.net-4.0標籤,但我沒有理由認爲這是特定於版本的。我現在暫緩添加C#標記,因爲我認爲問題不是特定於語言的,並且會很樂意使用VB.NET獲得建議。 –

回答

0

截止瞭解決此工作如下:而不是直接使用篩選的DataView作爲在DataGridView的DataSource,我用了DataView.ToTable()方法獲取僅包含篩選記錄的DataTable,並將其用作DataGridView的DataSource。由於DataGridView不再綁定到過濾的DataView,因此當選擇更改時,已更改的行不再從DataGridView中刪除。當用戶單擊'Save'按鈕時,我將DataTable合併回原始DataSet,保存更改,然後再次調用DataView.ToTable()方法,並將DataGridView重新綁定到DataTable以移除已更改的記錄。信用是由於我的同事邁克爾的建議,謝謝邁克爾。

0

嘗試myGrid.EndEdit();在組合選定索引更改後將更改發佈到網格。

您可能還需要改變目前的電池給力更新:

DataGridViewCell currentCell = myGrid.CurrentCell; 
try {    
    myGrid.EndEdit(); 
    myGrid.CurrentCell = null; 
    myGrid.CurrentCell = currentCell; 
} 
catch { 
    myGrid.CurrentCell = currentCell; 
    myGrid.CurrentCell.Selected = true; 
} 
+0

謝謝,但沒有:DataGridViewCell currentCell = this.ClassMembershipDataGrid.CurrentCell; this.ClassMembershipDataGrid.EndEdit(); //引發異常:操作無效,因爲它會導致對SetCurrentCellAddressCore函數的重入調用。 //this.ClassMembershipDataGrid.CurrentCell = null; this.ClassMembershipDataGrid.CurrentCell = currentCell; this.ClassMembershipDataGrid.Refresh(); –

相關問題