2012-11-30 20 views
0

我已經遇到下列情況下編輯值:異常由BindingSource.MoveNext拋出取消對數據源

try 
    { 
     Validate(); 
     myBindingSource.MoveNext(); 
    } 
    catch 
    { 
     if (MessageBox.Show("Do you want to keep editing the record?", "Error", 
      MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No) 
     { 
      myBindingSource.CancelEdit(); 
     }     
    } 

其中myBindingSource.Datasource是驗證一個DataTable和數據綁定文本框更新。

我將當前記錄的數據綁定文本框更改爲無效狀態(例如重複的主鍵)。當我調用上面的代碼片段時,自然會引發異常。

在catch塊中,datable行的字段值已恢復爲其原始值,但文本框值保持不變(我想要相同的文本框值)。

如果我再次調用相同的代碼片段,則不會引發異常(DataTable具有正確的值)。

我的問題是如何讓文本框再次將其數據發送到DataTable?

P.S.如果在第一次調用代碼片段之後更改文本框的值,DataSet將接收到更改。

+0

難道你需要一個else後MessageBox如果他們選擇是..?代碼的其餘部分在哪裏..? – MethodMan

+0

也是你在try {} catch {}聲明中捕獲的異常類型。你想要做的是將文本存儲在一個屬性或其他受保護的變量中,然後再次調用發送數據的方法..如果我正確理解你的話。 – MethodMan

+0

catch {}捕獲所有異常。 else部分缺失,因爲我不知道如何將DataTable恢復到每個以前的狀態。雖然第二次驗證不會導致DataTable獲取textbox.Text值,但兩次觸發文本框事件「驗證」。 – Blim

回答

0

我的最終解決方案如下(雖然它寫回的所有數據綁定控件到數據源至少它使數據源和同步控制。):

try 
{ 
    Validate(); 
    myBindingSource.MoveNext(); 
} 
catch 
{ 
    if (MessageBox.Show("Do you want to keep editing the record?", "Error", 
     MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No) 
    { 
     myBindingSource.CancelEdit(); 
    } 
    else 
    { 
     foreach (Binding b in myBindingSource.CurrencyManager.Bindings) 
       { 
        b.WriteValue(); 
       } 
    }     
}