[英]Textbox Binding Update Event
我有一個帶有多個文本框和一個數據表的表單,該數據表已綁定到文本框,並且正在處理該數據表的RowChanged事件。
但是,在加載表單( 有兩個以上的文本框 )時,僅會兩次調用RowChanged事件,數據表中的數據會很好地加載到文本框中,但是當我更改文本框中的文本時,不會觸發任何事件。 但是直接從數據表中顯示數據表明數據已更新。
碼:
private Clients.DataSetClients.ClientsDataTable dtClients = new DataSetClients.ClientsDataTable();
private Clients.DataSetClientsTableAdapters.ClientsTableAdapter taClients = new DataSetClientsTableAdapters.ClientsTableAdapter();
private void ClientsEdit_Load(object sender, EventArgs e)
{
dtClients.RowChanged += new DataRowChangeEventHandler(dtClients_RowChanged);
taClients.FillByID(dtClients, ClientID);
textForename.DataBindings.Add("Text", dtClients, "Forename", true, DataSourceUpdateMode.OnPropertyChanged);
//.......
// etc
//.......
textEmail.DataBindings.Add("Text", dtClients, "Email", true, DataSourceUpdateMode.OnPropertyChanged);
}
void dtClients_RowChanged(object sender, DataRowChangeEventArgs e)
{
MessageBox.Show("dtClients_RowChanged");
}
private void simpleButton1_Click(object sender, EventArgs e)
{
MessageBox.Show(dtClients.Rows[0]["Email"].ToString());
}
您可以嘗試連接綁定的BindingComplete
事件,而不是連接DataTable上的RowChanged事件(更多用於添加行和行位置更改等)。
private void ClientsEdit_Load(object sender, EventArgs e)
{
// loading stuff
Binding ForenameBinding = new Binding("Text", dtClients, "Forename", true, DataSourceUpdateMode.OnPropertyChanged);
ForenameBinding.BindingComplete += Table_BindingComplete;
textForename.DataBindings.Add(ForenameBinding);
// loading stuff
}
void Table_BindingComplete(object sender, BindingCompleteEventArgs e) {
if (e.BindingCompleteContext == BindingCompleteContext.DataSourceUpdate)
MessageBox.Show("Source Updated!");
}
每當用戶更改TextBox中的文本時,都會彈出該MessageBox,因此它將在每次擊鍵時觸發。 為了避免這種情況,請將綁定模式更改為OnValidation
:
Binding ForenameBinding = new Binding("Text", dtClients, "Forename", true, DataSourceUpdateMode.OnValidation);
private void button1_Click(object sender, EventArgs e)
{
List<string> names=new List<string>(){"Forename","Email","Phone"};
foreach (var name in names)
{
var txt = this.Controls["text" + name] as TextBox;
txt.DataBindings.Add("Text", dtClients, name, true, DataSourceUpdateMode.OnPropertyChanged);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.