在最后一个位置添加一个默认项目到c#combobox以及IEnumerable <class>

时间:2017-09-15 09:38:55

标签: c# combobox

这是我从存储过程中获取用户列表的格式。

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;
        }
    }
}

新用户似乎没有出现在我的下拉列表中。这里有什么问题,有人可以建议一个方法吗?提前谢谢。

3 个答案:

答案 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;
相关问题