c# – 如何将Combobox.Datasource输入字典?
发布时间:2020-12-15 08:36:41 所属栏目:百科 来源:网络整理
导读:以下是我的代码,它将List()绑定到ComboBox控件.我尝试使用Insert()方法向CombBox控件添加一些项目,这是不允许的,因为它已分配给数据源.那么,如何从返回对象的cmbColour.DataSource将数据返回到一个新变量(比如var colours2). Thanx! var colours= new Dicti
以下是我的代码,它将List()绑定到ComboBox控件.我尝试使用Insert()方法向CombBox控件添加一些项目,这是不允许的,因为它已分配给数据源.那么,如何从返回对象的cmbColour.DataSource将数据返回到一个新变量(比如var colours2). Thanx!
var colours= new Dictionary<string,string> { {"1x","Green"},{"2x","Red"},{"3y","Blue"},{"4y","Black"} }.ToList(); cmbColour.ValueMember = "Key"; cmbColour.DisplayMember = "Value"; cmbColour.DataSource = colours; var colours2 = //how can I get the DataSource back 解决方法
以下代码将返回一个新字典,其中包含绑定到组合框的相同数据.
var list = (List<KeyValuePair<String,String>>)cmbColor.DataSource; var dictionary = list.ToDictionary(kvp => kvp.Key,kvp => kvp.Value); 属性DataSource将返回您指定的同一实例,但由于它是类型化的Object,您必须先将其强制转换为实际类型,然后才能访问任何成员. 但你为什么不保留原字典?并且它肯定支持修改绑定到数据源的列表 – 这是数据绑定的全部要点. 我想我的答案并没有真正解决你的实际问题,只有你认为你的问题是什么.也许您可以提供一些有关您要实现的目标的其他信息,我或其他人将能够帮助您解决潜在问题. UPDATE 这应该适用于您的场景 – 我坚持使用用户示例. public class User { public String Id { get; set; } public String Name { get; set; } } 和表单的代码. public partial class MainForm : Form { private readonly BindingList<User> recentlyAddedUsers = new BindingList<User>(); private void MainFormLoad(Object sender,EventArgs e) { this.comboBoxRecentlyAddedUsers.DataSource = this.recentlyAddedUsers; this.comboBoxRecentlyAddedUsers.ValueMember = "Id"; this.comboBoxRecentlyAddedUsers.DisplayMember = "Name"; var recentlyAddedUsersFromService = this.GetRecentlyAddedUsers(); foreach (var user in recentlyAddedUsersFromService) { this.recentlyAddedUsers.Add(user); } } private void ButtonAddNewUserClick(Object sender,EventArgs e) { var newUser = new User(); newUser.Id = this.textBoxUserId.Text; newUser.Name = this.textBoxUserName.Text; this.SaveNewUser(newUser); this.recentlyAddedUsers.RemoveAt(0); this.recentlyAddedUsers.Insert(newUser); } private List<User> GetRecentlyAddedUsers() { // Get a list of recently added users from the database. } private void SaveNewUser(User user) { // Save the new user to the database. } } 注意BindingList< T>的使用. – 这将通知组合框有关列表的任何更改.一个简单的列表< T>也可以工作,但你必须明确告诉组合框刷新数据绑定. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |