2014-05-16 58 views
0

我有一個帶3個文本框和1個組合框的經典窗體。 Combobox顯示用戶列表,3個文本框應包含有關組合框中所選用戶的詳細信息。對於選定的用戶,我有一個特殊的屬性(如下所示),我用它作爲數據源。只有在第一次運行時纔可以。當顯示窗體時,更改組合框中的用戶不起作用。帶有數據綁定的C#文本框沒有更新

public partial class UserAdministration : Form 
{ 
    private readonly DataManager _dataManager = DataManager.Instance; 
    private User _selectedUser; 

    public UserAdministration() 
    { 
     InitializeComponent(); 
    } 

    private void UserAdministration_Load(object sender, EventArgs e) 
    { 
     AddUsers(); 
     textBoxName.DataBindings.Add("Text", _selectedUser, "Name"); 
     textBoxSurname.DataBindings.Add("Text", _selectedUser, "Surname"); 
     textBoxPassword.DataBindings.Add("Text", _selectedUser, "Password"); 
    } 

    private void AddUsers() 
    { 
     var users = _dataManager.UserProvider.GetAll().Select(pair => pair.Value).ToList(); 
     comboBoxUsers.DataSource = new BindingSource { DataSource = users }; 
     comboBoxUsers.DisplayMember = "ListViewText"; 
     if (users.Count > 0) 
      comboBoxUsers.SelectedIndex = 0; 
    } 

    private void comboBoxUsers_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     _selectedUser = comboBoxUsers.SelectedItem as User; 
    } 
} 

我錯過了什麼?數據綁定有什麼問題?

+0

什麼是組合框數據源更新模式設置爲? – jac

+0

Combobox數據源類型是[Object](http://msdn.microsoft.com/en-us/library/x8160f6f.aspx),所以它不能有更新模式,或者? – Tomask

+0

我錯過了你直接使用一個對象進行綁定。問題在於併發管理器。看看這個答案對你有幫助。 http://stackoverflow.com/questions/2209290/binding-textboxes-to-properties-of-a-combobox-selecteditem – jac

回答

2

綁定您的數據源,以CB使用此代碼:

comboBoxUsers.DataSource = users (directly to you datasource); 

綁定相同的數據文本做這樣的:

textbox1.DataBindings.Add("Text", users, "username", true); 

的唯一的一點是,你需要鏈接兩個控件到同一個ds實例

+0

完美,這正是我所期待的。順便說一句,它在內部使用Combobox.SelectedItem,對吧? – Tomask

0

我只有一個表單,我只想綁定到數據庫列的文本框。

當我使用「屬性」設置將該文本框數據綁定到一列時,它爲我創建了bindingSource1和表格適配器。

當我點擊保存按鈕時,我只是加了bindingSource1.EndEdit();,然後它正確地保存到數據庫。

相關問題