我保證我已經看過聲稱這個問題的bazillion帖子,所以請原諒我,我仍然難倒。VB.net DataRow.RowState不會更新
我有一個包含強類型數據集的VS2008智能設備項目。用戶可以輸入值並保存,每次在數據集中創建新記錄。如果用戶希望編輯值,則會顯示一個模態子窗體,並帶有多個組合框,其中包含可接受輸入的可能值以編輯該行。每個組合框都以下面的方式綁定在子窗體的構造函數中:
With cmbSize
.DataSource = frmMain.dstConfig.Sizes
.DisplayMember = "Display"
.ValueMember = "Value"
.DataBindings.Add("SelectedValue", trowNewRow, "SIZE", True, DataSourceUpdateMode.OnPropertyChanged)
End With
dstConfig是包含約束的表的數據集。綁定到源代碼的顯示和值成員工作正常。
trowNewRow是對用戶啓動編輯過程時從主窗體傳遞的數據集中的行的引用,通過將該行作爲參數「ByRef」傳遞給子窗體。強打字被保存下來。在我看來,可能會出現某種斷開,我不知道這種情況何時發生。我通過對數據集執行「選擇」過程並通過與要編輯的行對應的唯一ID字段進行過濾來傳遞參考。結果是與數據集相同模式的強類型行的單項數組,其中第一個(也是唯一)項作爲我的對象傳遞。
用戶通過單擊確定按鈕提交更改後,會觸發過程以評估是否實際執行了更改。我認爲這樣做的最好方法是檢查trowNewRow的RowState。但是,無論更改如何,RowState都會保持「添加」狀態。手動檢查行的值表示更改確實已記錄。我已驗證trowNewRow的AcceptChanges過程沒有被我的任何代碼明確地調用。
我曾嘗試以下: 1)調用trowNewRow 的EndEdit中方法2)手動執行上調用的組合框BindingManagerBase的EndCurrentEdit過程的組合框 3.)一個WriteValue對象 4。 )上述各項組合
預先感謝您的任何想法或解決方案。
代替這兩個長段落的相關代碼可能會更好地說明問題並減少乏味。如果行狀態是已添加,則表示dataadapter尚未更新數據庫。由於它是一個新的行,所以在你保存之前它仍然是一個新的行(不管有多少編輯/改變)。 – Plutonix