在Databound ComboBOX顶部插入自定义值

时间:2014-09-23 05:47:06

标签: c# winforms data-binding combobox

我想在我的comboBox顶部插入一个默认值。请告诉我一个正确的方法。

我尝试了什么

我的代码:

 using (var salaryslipEntities = new salary_slipEntities())
            {
                    Employee emp = new Employee();
                      cmbEmployeeName.DataSource = salaryslipEntities.Employees.ToList();
                         cmbEmployeeName.Items.Insert(0, "Select Employee");
                          }

错误

设置DataSource属性时无法修改项集合。

1 个答案:

答案 0 :(得分:1)

您可以使用System.Reflection执行此操作。检查下面的代码示例。

编写一个常用方法来添加默认项目。

 private void AddItem(IList list, Type type, string valueMember,string displayMember, string displayText)
    {
        //Creates an instance of the specified type 
        //using the constructor that best matches the specified parameters.
        Object obj = Activator.CreateInstance(type);

        // Gets the Display Property Information
        PropertyInfo displayProperty = type.GetProperty(displayMember);

        // Sets the required text into the display property
        displayProperty.SetValue(obj, displayText, null);

        // Gets the Value Property Information
        PropertyInfo valueProperty = type.GetProperty(valueMember);

        // Sets the required value into the value property
        valueProperty.SetValue(obj, -1, null);

        // Insert the new object on the list
        list.Insert(0, obj);
    }

然后使用这样的方法。

List<Test> tests = new List<Test>();
        tests.Add(new Test { Id = 1, Name = "Name 1" });
        tests.Add(new Test { Id = 2, Name = "Name 2" });
        tests.Add(new Test { Id = 3, Name = "Name 3" });
        tests.Add(new Test { Id = 4, Name = "Name 4" });

        AddItem(tests, typeof(Test), "Id", "Name", "< Select Option >");
        comboBox1.DataSource = tests;
        comboBox1.ValueMember = "Id";
        comboBox1.DisplayMember = "Name";

我在代码中使用了这个测试类

public class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
}