2009-09-03 4 views
0

Как далеко заходит код для обеспечения лучшей функциональности? У меня есть два ComboBox, поэтому первый относится к выбору компании, а второй для выбора филиала по отношению к одному.Проблемы с источником данных LINQ и ComboBox

Хочу отметить, что единственный способ, которым я могу заполнить источник данных с фильтрацией .где на LINQ находится на этом пути, может быть, Im не так, пожалуйста, примите момент для смотрите следующий фрагмент:

private void cboCompany_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      var _index = ((ComboBox)sender).SelectedIndex; 
      using (DB db = new DB()) 
      { 
       var su = (from s in db.Branchs select s); 

       if (cboCompany.SelectedIndex == 0) 
       { 
        cboBranch.DataSource = su.Where(x => x.codeCompany == 1).Select(x => x.name).ToList(); 
       } 
       else if (cboCompany.SelectedIndex == 1) 
       { 
        cboBranch.DataSource = su.Where(x => x.codeCompany == 2).Select(x => x.name).ToList(); 
       } 

       cboBranch.BindingContext = this.BindingContext; 
       cboBranch.DisplayMember = "name"; 
       cboBranch.SelectedIndex = 0; 
      } 
     } 

Заранее спасибо!

ответ

2

Вместо того, чтобы вручную кодировать это, я бы привязал данные, чтобы все это работало для меня. В частности, его можно настроить таким образом:

  • Сделайте так, чтобы ваш класс Company имел свойство получить все связанные ветви - например. Company.Branches. Если вы используете LINQ to SQL или Entity Framework, там уже должен быть один.
  • Есть два BindingSource s, bsCompanies и bsBranches.
  • Установите cboCompany.DataSource в bsCompanies и cboBranch.DataSource к bsBranches
  • Набор bsCompanies.DataSource сбора/DataSet, который содержит компании.
  • bsBranches.DataSource до Branches под bsCompanies (разработчик формы должен сделать это после выполнения предыдущего шага, если ваша коллекция строго типизирована).

Теперь, когда пользователь выбирает другую компанию в первом комбо, текущий элемент в источнике привязки компаний изменится. Это вызовет привязку второго источника привязки к переоценке и установит список ветвей для вновь выбранной компании как источника для второго комбо.

+0

Да, это было на ум, кстати .. Что произойдет, если ветка является необязательной, я имею в виду, что вам нужно проверить возле Branch Combo, чтобы включить этот элемент управления и выбрать, хотите ли вы, в этом действии Binding Источник терпит неудачу или нет? –

+0

Зачем это терпеть неудачу? Разумеется, он все равно будет разветвлять филиалы для компаний, так что пользователь не сможет взаимодействовать с полями combobox. –

+0

Я вижу, спасибо за информацию. Можете ли вы предоставить больше ссылок о передовых источниках BindingSource, например, с использованием общих или сложных типов. –

Смежные вопросы