在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();
}