Как вставить элемент вверху поля со списком? - PullRequest
3 голосов
/ 02 апреля 2011

Привет! Я использую Linq для SQl, чтобы связать элемент управления со списком.Как я могу добавить элемент вверху списка со списком?

var items = from c in db.Contacts
                               orderby c.Name ascending
                               select c;
                if (items.ToList().Count > 0)
                {
                    cmb1.BindingContext = new BindingContext();
                    cmb1.DataSource = items;
                    cmb1.DisplayMember = "Name";
                    cmb1.ValueMember = "ID";
                }

                cmb1.Items.Insert(0, "--Select--");

Этот код не работает.

Ответы [ 5 ]

9 голосов
/ 02 апреля 2011

Один из способов - вставить заполнитель контакта "--Select--" в результаты перед привязкой:

     var items = (from c in db.Contacts
                  orderby c.Name ascending
                  select c).ToList();

     items.Insert(0, new Contact { ID = 0, Name = "--Select--" });

     cmb1.BindingContext = new BindingContext();
     cmb1.DataSource = items;
     cmb1.DisplayMember = "Name";
     cmb1.ValueMember = "ID";

Или вы можете сделать то же самое с анонимной версией результатов:

     var items = (from c in db.Contacts
                  orderby c.Name ascending
                  select new { c.ID, c.Name }).ToList();

     items.Insert(0, new { ID = 0, Name = "--Select--" });

     cmb1.BindingContext = new BindingContext();
     cmb1.DataSource = items;
     cmb1.DisplayMember = "Name";
     cmb1.ValueMember = "ID";
2 голосов
/ 02 апреля 2011

Как вы отметили в своем собственном комментарии к своему вопросу, вы не можете вставить элемент после привязки данных.

Одним из вариантов будет использование Concat для объединения последовательности, содержащей ваш«Выбрать» пункт с результатами вашего запроса.

0 голосов
/ 09 марта 2018

Добавление пустого выделения вверху списка после привязки к комбинированному полю OnLoad.EF 6

db.Users.Load();
var updateList = db.Users.Local.ToBindingList();  updateList.Inset(0, new User { ID=0, UserId = "" });    this.userComboBox.DataSource = updateList}
0 голосов
/ 16 августа 2013

Все вышеперечисленное не работает.Я перепробовал все и в итоге ниже.Перечислимые выходные данные и списки запросов Linq кажутся неизменяемыми, как массивы

. Надеюсь, ваше требование удовлетворяет следующим требованиям

cbo.Items.Clear ();

        Region optAll = new Region { RegionName = "All", RegionId = 0 };

        var qOrg = (from rows in LDC.Regions orderby rows.RegionName 
                    select new
                        {
                            rows.RegionId,
                            rows.RegionName
                        }).ToList();
        if(needAll)
            cbo.Items.Add(optAll);

        foreach (var region in qOrg)
        {
            cbo.Items.Add(region);
        }

        cbo.DisplayMember = "RegionName";
        cbo.ValueMember = "RegionId";
0 голосов
/ 02 апреля 2011

Вставьте элемент --Selected-- не непосредственно в коллекцию combo.items, а в список элементов, который вы связали с комбо.

List = linq query;
List.Insert(0, "--Select--");

combo.Datasource = List;
...