Как добавить опцию «Все» поверх списка со списком

#c# #winforms #combobox

#c# #winforms #выпадающий список

Вопрос:

Мне нужно добавить опцию «ВСЕ» в качестве верхнего выбора списка со списком. Я пробовал этот код ниже, но не работает. Ошибка, которую я получаю: «не удается преобразовать из «<анонимный тип: имя строки, значение int>» в «<анонимный тип: строковое название страны, идентификатор страны int>»» Как мне поступить? Пожалуйста, я новичок в этом персонале.

Это мой код

 private void LoadCountries()
        {
            try
            {
                using (Db db = new Db())
                {
                    var countries = (from u in db.Countries
                                     select new {Name =  u.CountryId, Value = u.CountryName }).ToList();


                    countries.Insert(0, new { Name = "All", Value = -1 }); // here I'am trying to add "All" Option

                    cmbCountry.DisplayMember = "CountryName";
                    cmbCountry.ValueMember = "CountryId";
                    cmbCountry.DataSource = countries;

                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                Exception inner = ex.InnerException;
                while (inner != null)
                {
                    MessageBox.Show(inner.Message);
                    inner = inner.InnerException;
                }
            }
        }
  

Заранее благодарю вас

Комментарии:

1. I have tried this code below but npt working Что не работает? Ошибки?

2. Появляется ли что-нибудь из этого? Я бы этого не ожидал. У вашего анонимного объекта есть свойства Name и Value , но вы устанавливаете элементы отображения и значения в CountryName и CountryId

3. @Jonesopolis спасибо за ваш ответ. Даже если я пишу без свойств, например, «выберите новый {u.countryName, u.countrynid }). ToList();» Я получаю ту же ошибку. Что мне делать? Еще раз спасибо и оцените, если вы напишете какой-нибудь код, чтобы мне было легче понять. Ошибка «не удается преобразовать из «<анонимный тип: имя строки, значение int>» в «<анонимный тип: строковое название страны, идентификатор страны int>»»

4. @LarsTech, спасибо за ваш ответ. Ошибка, которую я получаю: «не удается преобразовать из «<анонимный тип: имя строки, значение int>» в «<анонимный тип: строковое название страны, идентификатор страны int>»»

Ответ №1:

вы хотите правильно указать свойства DisplayMember и ValueMember:

 var countries = (from u in db.Countries
                 select new { Name =  u.CountryName, Value = u.CountryId }).ToList();

countries.Insert(0, new { Name = "All", Value = -1 }); 

cmbCountry.DisplayMember = "Name"; //use correct property name
cmbCountry.ValueMember = "Value";
cmbCountry.DataSource = countries;
  

Комментарии:

1. теперь, после обновления вашего кода, я получаю почти аналогичную ошибку «не удается преобразовать из ‘<анонимный тип: имя строки, значение int>’ в'<анонимный тип: имя int, значение string>'»

2. Я скопировал ваши свойства, которые были обратными. Попробуйте обновить

3. Замечательно, это работает. Большое спасибо. Вы спасаете мой день…. Еще раз спасибо!