以下是我的代码,它绑定List()到一个ComboBox控件.我试过几个项目添加到使用CombBox控制Insert() method它not allowed,因为它已经被分配给一个数据源.那么,如何从返回对象的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
Run Code Online (Sandbox Code Playgroud)
以下代码将返回一个新字典,其中包含绑定到组合框的相同数据.
var list = (List<KeyValuePair<String, String>>)cmbColor.DataSource;
var dictionary = list.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Run Code Online (Sandbox Code Playgroud)
该属性DataSource将返回您指定的同一实例,但由于它是键入的,Object您必须先将其强制转换为实际类型,然后才能访问任何成员.
但你为什么不保留原字典?并且它肯定支持修改绑定到数据源的列表 - 这是数据绑定的全部要点.
我想我的答案并没有真正解决你的实际问题,只有你认为你的问题是什么.也许您可以提供一些有关您要实现的目标的其他信息,我或其他人将能够帮助您解决潜在问题.
UPDATE
这应该适用于您的场景 - 我坚持使用用户示例.
public class User
{
public String Id { get; set; }
public String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和表单的代码.
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.
}
}
Run Code Online (Sandbox Code Playgroud)
注意使用BindingList<T>- 这将通知组合框有关列表的任何更改.一个简单的List<T>也可以工作但是你必须明确告诉组合框刷新数据绑定.
| 归档时间: |
|
| 查看次数: |
9196 次 |
| 最近记录: |