这是我从存储过程中获取用户列表的格式。
IEnumerable<User> users = new List<User>();
现在我正在尝试将此列表绑定到我的组合框中,如:
private void BindDropdownList(IEnumerable<User> users)
{
selectuser_dropdown.Items.Insert(0, "+ New User"); // Want this to be at last position.
selectuser_dropdown.DataSource = users;
selectuser_dropdown.DisplayMember = "FullName";
selectuser_dropdown.ValueMember = "Id";
}
我的课程是:
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Username { get; set; }
public bool IsAdmin { get; set; }
public string FullName {
get
{
return LastName + ", " + FirstName;
}
}
}
但新用户似乎没有出现在我的下拉列表中。这里有什么问题,有人可以建议一个方法吗?提前谢谢。
答案 0 :(得分:1)
您的代码在添加项目下拉列表然后设置数据源
之前当您进行数据源分配时,您会粉碎旧数据。
添加用户列出新项之前设置
datasource
selectuser_dropdown
或
设置 selectuser_dropdown
dataSource
然后添加 下拉新项目selectuser_dropdown.Items.Insert(0, "+ New User");
private void BindDropdownList(IEnumerable<User> users)
{
// users.ToList().Add(new User(){ .. , .. , .. });
selectuser_dropdown.DataSource = users;
selectuser_dropdown.DisplayMember = "FullName";
selectuser_dropdown.ValueMember = "Id";
// selectuser_dropdown.Items.Insert(0, "+ New User");
}
答案 1 :(得分:0)
尝试后我发现在将数据绑定到数据源后无法将项添加到ComboBox中。要从带有绑定数据源的ComboBox添加项目,您必须通过数据源本身来完成。您可以使用Datatable,然后将新行添加到其中,
private void BindDropdownList(IEnumerable<User> users)
{
DataTable dt = users.ToDataTable();
selectuser_dropdown.DataSource = dt ;
selectuser_dropdown.DisplayMember = "FullName";
selectuser_dropdown.ValueMember = "Id";
DataRow dr = dt.NewRow();
dr["FullName"] = "Select";
dr["Id"] = 0;
dt.Rows.InsertAt(dr, 0);
}
答案 2 :(得分:0)
不要严格评判我,我认为在这里使用装饰模式会很优雅。你可以将默认用户列表包装到UserListDecorator中,从而在列表的开头或末尾添加一个新元素
public class UserListDecorator : IEnumerable<User>
{
private IEnumerable<User> users;
public UserListDecorator(IEnumerable<User> users)
{
this.users = users;
}
public IEnumerator<User> GetEnumerator()
{
var innerList = users.ToList();
innerList.Add(new User() {LastName = "New User", Id = 0});
return innerList.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
您可以获得两个列表,基本列表和另一个新用户选项。
IEnumerable<User> users = new List<User>()
{
new User() { LastName = "One" },
new User() { LastName = "Two" }
};
var withNewUser = new UserListDecorator(users);
selectuser_dropdown.DataSource = withNewUser;