以下是我的代码,它将 List()
绑定(bind)到 ComboBox
控件。我尝试使用 Insert() 方法
向 CombBox 控件添加一些项目,这是 不允许
因为它已分配给数据源。那么,如何从返回对象的 cmbColour.DataSource 将数据源返回到新变量(例如,var colours2)。谢谢!
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
最佳答案
以下代码将返回一个新字典,其中包含您绑定(bind)到组合框的相同数据。
var list = (List<KeyValuePair<String, String>>)cmbColor.DataSource;
var dictionary = list.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
属性(property)DataSource
将返回您分配的相同实例,但因为它的类型为 Object
在访问任何成员之前,您必须将其转换回实际类型。
但是你为什么不只保留原始字典呢?并且绝对支持修改绑定(bind)到数据源的列表 - 这就是数据绑定(bind)的全部要点。
我想我的回答并不能真正解决你的实际问题,只能解决你认为你的问题是什么。也许你可以提供一些关于你想要实现的目标的额外信息,我或其他人将能够帮助你解决你的根本问题。
更新
这应该适用于您的场景 - 我坚持使用用户示例。
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>
的用法- 这将通知组合框有关列表的任何更改。一个简单的List<T>
也可以,但是您必须明确告诉组合框刷新数据绑定(bind)。
关于c# - 如何获取 Combobox.Datasource 到字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959644/