2011-09-04 115 views
0

我有一個WPF C#datagrid,可以使用SqlDataAdapter進行過濾並使用ItemsSource屬性進行顯示。在過濾後編輯wpf datagrid行

我也可以在過濾之前更新/刪除行,但不能之後。

diamedbEntities objContext; 
Sender objSendToEdit; 

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    objContext = new diamedbEntities(); 
    dgEmp.ItemsSource = objContext.Senders; 
} 

private void dgEmp_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{  
    objSendToEdit = dgEmp.SelectedItem as Sender; 
} 

private void btnDelete_Click(object sender, RoutedEventArgs e) 
{ 
    if (objSendToEdit == null) 
    { 
     MessageBox.Show("Cannot delete the blank Entry"); 
    } 
    else 
    { 
     objContext.DeleteObject(objSendToEdit); 
     objContext.SaveChanges(); 
     MessageBox.Show("Record Deleted.."); 
    } 
} 

過濾後objSendToEdit爲空。 我該如何解決這個問題?

+0

應該看看CollectionViewSource,它使過濾變得簡單。我在我的網站上有一個例子:http://www.jarloo.com/excel-like-autofilter-in-wpf/ – Kelly

回答

0

http://msdn.microsoft.com/en-us/library/cscsdfbt(v=VS.100).aspx

的作爲操作者 就像是一個鑄造操作。但是,如果轉換不是 可能,則返回null而不是引發異常。

你想用objSendToEdit = dgEmp.SelectedItem as Sender;做什麼?

+0

objContext.DeleteObject(objSendToEdit); objContext.SaveChanges(); – user626873

+0

好吧,讓我換句話說,爲什麼要將'SelectedItem'投射到'Sender'類型? – CodeCaster

+0

發件人是填充datagrid的數據庫表。在過濾數據網格之前,它工作正常。 – user626873

0

這是因爲過濾器必須清除選擇,從而使objSendToEdit爲空。

您應該在過濾後立即重新選擇objSendToEdit回到數據網格。

objSendToEdit = dgEmp.SelectedItem; 
    //// filter code 
    dgEmp.SelectedItem = objSendToEdit; 

讓我知道這是否有幫助。