我有一個DTO的BindingList,它可以直接綁定到窗體窗體控件,並且當用戶想要刪除我的datagridview中的一行時引發問題。DTO的BindingList支持對象刪除狀態
在這種情況下,刪除的對象(行)消失,當DTO BindingList返回服務器進行更新時,我不知道要刪除哪一行。
BindingList默認情況下是否可以爲已刪除的對象創建一個集合,或者我必須手動實現它,或者對於我的情況還有另一個選項?
任何幫助,將不勝感激。
我有一個DTO的BindingList,它可以直接綁定到窗體窗體控件,並且當用戶想要刪除我的datagridview中的一行時引發問題。DTO的BindingList支持對象刪除狀態
在這種情況下,刪除的對象(行)消失,當DTO BindingList返回服務器進行更新時,我不知道要刪除哪一行。
BindingList默認情況下是否可以爲已刪除的對象創建一個集合,或者我必須手動實現它,或者對於我的情況還有另一個選項?
任何幫助,將不勝感激。
BindingList有列表更改時引發的ListChanged事件。您需要編寫處理此事件的代碼並跟蹤列表中的哪些項目已被刪除。
http://msdn.microsoft.com/en-us/library/ms132742.aspx
另一種選擇是,因爲他們在DataGridView發生跟蹤刪除。
在我看來,用LinQ手動獲取數據。 創建結果的DataTable像
DataTable dt = new DataTable();
dt.Columns.Add("Want to Delete?",typeof(bool));
dt.Columns.Add("Data Id", typeof(string));
dt.Columns.Add("Data 1", typeof(string));
dt.AcceptChanges();
return dt;
那麼你的結果一樣創建行。
在一個循環中的foreach(VAR結果myResult)object[] row = new object[]
{
false,
result.Id,
result.Data1
};
dt.Rows.Add(row);
讓用戶可以選擇行進行刪除,用戶可以檢查第一列。因爲它是布爾(複選框) 和刪除按鈕點擊事件發生後,拉手選擇的行
foreach (DataRow dr in yourDataTable.Rows)
{
if (Convert.ToBoolean(dr[0])) // goes in if its checked
{
// delete dr[0]
}
}
我希望這會幫助你。
嗨Serkan,我需要在1次傳輸中將更改應用到數據庫,您的解決方案可以很好地處理一個簡單的對象,但我擔心它無法與更復雜的對象(具有子關係的對象...),子對象首先得到更新,當用戶想要取消主對象的編輯時,被刪除的子對象不能被恢復。謝謝。 – TheMy 2010-06-30 10:20:12
嗨沃爾特,非常感謝您的快速回復。 ListChanged事件在對象從列表中移除後觸發,因此我無法在此處獲取對已刪除項目的引用。 我可以在我的BindingList中有一個列表,它保留所有的原始項目並從那裏獲取已刪除的項目,但我認爲這不是一個好主意。 跟蹤從DataGridView的刪除不是我的選擇,因爲我建立一個服務,爲我的客戶提供DTO對象,所以我無法控制在客戶端發生的事情。 您對此有任何其他想法嗎? – TheMy 2010-06-30 10:30:35
@TheMy - 您的綁定列表是繼承BindingList(即MyObjectList:BindingList)的自定義類嗎?還是它是MyObject的BindingList? – Walter 2010-06-30 15:16:03
嗨沃爾特,我的BindList是一個自定義的類,它繼承自BindingList,它作爲我的自定義對象的BindingList,下面是我的類的聲明: public class DataList:BindingList 其中T:DataTransferBase –
TheMy
2010-07-01 03:17:14