2017-03-03 52 views
0

我有一個刪除從列表,它是源數據網格項目將導致觸發選擇改變在同一網格

ObservableCollection<ProductTemporary> result = ProductsTempController.Instance.SelectAll(); 

被以源極到我的DataGrid,並通過按下DEL而在數據網格項目中選擇我刪除它:

if (e.Key == Key.Delete) 
{ 
    if (dataGridProducts.SelectedItem != null) 
    { 
     ProductTemporary tempItem = (ProductTemporary)dataGridProducts.SelectedItem; 
     ProductTemporaryController.Instance.Delete(tempItem.Id); 
     dataGridProducts.Remove(tempItem); 
     UpdateTotalAmount(); 
    } 
} 

問題從這裏開始:

dataGridProducts.Remove(tempItem); 

此行dataGridPr後觸發了改變選項,所以我失去了對我的網格項目的關注,並且我想要通過選擇一個並保持DEL按下來刪除所有項目。

所以,我怎麼能避免改變其源(dataGridProducts.Remove(tempItem))後,觸發dataGridProducts選擇更改事件,我試圖與e.Handled=true,像這樣:

if (e.Key == Key.Delete) 
{ 
    e.Handled=true; 
    if (dataGridProducts.SelectedItem != null) 
    { 
     ProductTemporary tempItem = (ProductTemporary)dataGridProducts.SelectedItem; 
     ProductTemporaryController.Instance.Delete(tempItem.Id); 
     dataGridProducts.Remove(tempItem); 
    } 
} 

但事與願違幫助我..

謝謝你們 乾杯

**後MM8建議我做編輯:** 7

if (e.Key == Key.Delete) 
      { 
       if (dataGridProducts.SelectedItem != null) 
       { 
        ProductTemporary tempItem = (ProductTemporary)dataGridProducts.SelectedItem; 
        ProductTemporaryController.Instance.Delete(tempItem.Id); 
       } 
       UpdateTotalAmount(); 
      } 

但不知何故,每次我在DataGrid中刪除的項目,可以說我有DataGrid中2項,當我按下DEL鍵,也可以從UI中消失,但在背後UpdateTotalAmount方法代碼調用,並在我的ObservableCollection<ProductTemporary> result有仍然是兩個項目,因此它會告訴我的兩個項目,而不是一個總量..

這裏是我的方法的代碼:

public void UpdateTotalAmount() 
     { 
      double sum = 0; 

      foreach (var item in result) 
      { 
       sum += Convert.ToDouble(item.TotalAmount); 
      } 

      btnTotal.Content = string.Format("{0:0.00}", sum) + " " + EUR; 


     } 

我怎麼能處理呢?

回答

1

爲什麼您明確從ObservableCollection中刪除項目? DataGrid控件爲你做這個,所以你只需要從數據庫中刪除該項目。

嘗試處理PreviewKeyDown事件爲DataGrid這樣的:

<DataGrid x:Name="dataGridProducts" PreviewKeyDown="dg_KeyDown" ... /> 

private void dg_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Delete) 
    { 
     if (dataGridProducts.SelectedItem != null) 
     { 
      ProductTemporary tempItem = (ProductTemporary)dataGridProducts.SelectedItem; 
      ProductTemporaryController.Instance.Delete(tempItem.Id); 
     } 
    } 
} 

換句話說,你可能只是從你的事件處理程序刪除dataGridProducts.Remove(tempItem);線。

+0

我明確地從'ObservableCollection'中刪除項目,因爲後來我循環了'ObservableCollection',它也是我的源數據網格,因爲它包含產品信息,如標題,價格等,我也顯示在我的window.xaml總金額 - 價格總和,所以當我從datagrid刪除項目acctualy需要從'ObservableCollection'刪除它,因爲我需要更新我的datagrid中的產品總量..我正在這樣做,正如我所說的通過循環我的ObservableCollection'並提供價格... –

+0

有一種解決方案,從數據庫中刪除項目,然後當我更新總金額,調用'ObservableCollection result = ProductsTempController.Instance.SelectAll();'和像這樣我會從數據庫中得到更新的項目,我會得到正確的總和,但我認爲這是壞的方法,因爲我每次從dataGrid中刪除項目時都調用GET ALL TEMP PRODUCTS .. –

+0

問題是DataGrid刪除ObservableCollection中的項目會在按下刪除鍵時自動爲您自動執行。這是建立在功能。你甚至嘗試過我的建議嗎?它爲我創造奇蹟。 – mm8

1

我會說最好的選擇是將數據網格的SelectedIndex設置爲下一個項目的索引。實際上,它將成爲現有項目的索引,因爲通過將其從集合中刪除,下一個項目將假定其索引。

+0

可能工作,但比我選擇的項目/索引不會突出顯示,就像當用戶點擊它時一樣。 –

0

這是一個列表失去它的選擇項目時刪除正好在相反的理由比這個標準的行爲:

我想選擇只有一個,保持DEL鍵刪除所有項目按

這將是一個不錯的辦法,以允許用戶通過按下Delete鍵刪除兩次在一行中的兩個項目,因此有兩件事情可以做:

  1. 較新和最好的方法是在某個地方有一個清晰的按鈕,以便當您想要一次刪除所有項目時,您可以在網格中處理多個選擇。我的意思是如果你有任何需要網格選定項目的進程。否則,只需將datagrids選擇模式設置爲多個

相關問題