[C#][WPF]解決DataGrid沒有立刻更新至資料來源

  • 1425
  • 0
  • 2016-04-07

在DataGrid使用DataGridCheckBoxColumn作為刪除資料列的標記,使用者可以先勾選想要刪除的資料列後,再按下鍵盤上的「刪除(Delete)按鈕」來刪除所有勾選的資料列。在DataGrid的PreviewKeyDown事件裡使用DataGrid資料來源(這裡的資料來源是DataTable)裡的IsChecked欄位(IsChedked欄位是我自行加入的,用來與DataGridCheckBoxColumn做資料繫結)判斷資料列是否有被勾選,但是最後一個勾選的CheckBox資料沒有更新至IsChedked欄位,所以沒有被刪除到。這時,可以使用DataGrid的CommitEdit()方法結束編輯模式立即更新資料源。程式如下:

 

 

//在DataGrid按下按鍵會觸發的事件。
private void DataGrid1_PreviewKeyDown(object sender, KeyEventArgs e)
{
    //判斷是否按下Delete鍵。
  if (e.Key != Key.Delete)
	return;
    
    //結束編輯模式,立即更新資料源。
  this.DataGrid1.CommitEdit(DataGridEditingUnit.Row, true);

    //找出被勾選的資料列。
  var checkedrow = (this.DataGrid1.ItemsSource as DataView)
    .Cast<DataRowView>().Where(w => ((bool)w["IsChecked"]) == true)
    .Select(s => s);

  if (checkedrow == null || checkedrow.Count() <= 0)
	return;

  if (MessageBoxResult.No == MessageBox.Show("確定要刪除嗎?", "提示", MessageBoxButton.YesNo))
	return;

    //逐一刪除被勾選的資料列。
  checkedrow.ToList().ForEach((f) =>
  {
	if ((bool)f["IsChecked"])
	  f.Delete();
  });
    
 //自定義函式,主要做為更新資料庫使用。
 UpdateToSQL();		
}