c# – 如何将Combobox.Datasource输入字典?

前端之家收集整理的这篇文章主要介绍了c# – 如何将Combobox.Datasource输入字典?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是我的代码,它将List()绑定到ComboBox控件.我尝试使用Insert()方法向CombBox控件添加一些项目,这是不允许的,因为它已分配给数据源.那么,如何从返回对象的cmbColour.DataSource将数据返回到一个新变量(比如var colours2). Thanx!
  1. var colours= new Dictionary<string,string>
  2. {
  3. {"1x","Green"},{"2x","Red"},{"3y","Blue"},{"4y","Black"}
  4. }.ToList();
  5.  
  6. cmbColour.ValueMember = "Key";
  7. cmbColour.DisplayMember = "Value";
  8. cmbColour.DataSource = colours;
  9.  
  10. var colours2 = //how can I get the DataSource back

解决方法

以下代码将返回一个新字典,其中包含绑定到组合框的相同数据.
  1. var list = (List<KeyValuePair<String,String>>)cmbColor.DataSource;
  2.  
  3. var dictionary = list.ToDictionary(kvp => kvp.Key,kvp => kvp.Value);

属性DataSource将返回您指定的同一实例,但由于它是类型化的Object,您必须先将其强制转换为实际类型,然后才能访问任何成员.

但你为什么不保留原字典?并且它肯定支持修改绑定到数据源的列表 – 这是数据绑定的全部要点.

我想我的答案并没有真正解决你的实际问题,只有你认为你的问题是什么.也许您可以提供一些有关您要实现的目标的其他信息,我或其他人将能够帮助您解决潜在问题.

UPDATE

这应该适用于您的场景 – 我坚持使用用户示例.

  1. public class User
  2. {
  3. public String Id { get; set; }
  4.  
  5. public String Name { get; set; }
  6. }

和表单的代码.

  1. public partial class MainForm : Form
  2. {
  3. private readonly BindingList<User> recentlyAddedUsers = new BindingList<User>();
  4.  
  5. private void MainFormLoad(Object sender,EventArgs e)
  6. {
  7. this.comboBoxRecentlyAddedUsers.DataSource = this.recentlyAddedUsers;
  8.  
  9. this.comboBoxRecentlyAddedUsers.ValueMember = "Id";
  10. this.comboBoxRecentlyAddedUsers.DisplayMember = "Name";
  11.  
  12. var recentlyAddedUsersFromService = this.GetRecentlyAddedUsers();
  13.  
  14. foreach (var user in recentlyAddedUsersFromService)
  15. {
  16. this.recentlyAddedUsers.Add(user);
  17. }
  18. }
  19.  
  20. private void ButtonAddNewUserClick(Object sender,EventArgs e)
  21. {
  22. var newUser = new User();
  23.  
  24. newUser.Id = this.textBoxUserId.Text;
  25. newUser.Name = this.textBoxUserName.Text;
  26.  
  27. this.SaveNewUser(newUser);
  28.  
  29. this.recentlyAddedUsers.RemoveAt(0);
  30. this.recentlyAddedUsers.Insert(newUser);
  31. }
  32.  
  33. private List<User> GetRecentlyAddedUsers()
  34. {
  35. // Get a list of recently added users from the database.
  36. }
  37.  
  38. private void SaveNewUser(User user)
  39. {
  40. // Save the new user to the database.
  41. }
  42. }

注意BindingList< T>的使用. – 这将通知组合框有关列表的任何更改.一个简单的列表< T>也可以工作,但你必须明确告诉组合框刷新数据绑定.

猜你在找的C#相关文章