none
Связывание данных с ComboBox RRS feed

  • Вопрос

  • Здравствуйте. Разрабатываю приложение в среде VS, язык С#.

    Необходимо связать (заранее извлеченные из БД в DataSet.Table) данные  с ComboBox. Связываю следующим образом:

     

    private void MainForm2_Load(object sender, EventArgs e)

    {

    .......................

     

    this.bindingSourcePERIOD.DataSource = this.DataSet;

    this.bindingSourcePERIOD.DataMember = TableName;

    this.comboBoxPERIOD.DataBindings.Add(new Binding("SelectedValue", this.bindingSourcePERIOD.DataSource, this.bindingSourcePERIOD.DataMember, true));

    this.comboBoxPERIOD.DataSource = bindingSourcePERIOD;

    this.comboBoxPERIOD.DisplayMember = "PERIOD";

    this.comboBoxPERIOD.ValueMember = "RECID";

    }

     

    Данные извлекаются и связываются с ComboBox корректно (по крайней мере они все попадают в список). Работаю с программой, выполняю различные операции – все нормально. Но стоит только каким-то образом поработать с этим ComboBox (просто просмотреть выпадающий список или выбрать другое значение из списка) после чего часть функционала моей программы перестает вообще реагировать на события (нажатие на кнопки, переход по страницам TabControl и т.д.). Причем интересно, что часть функционала работает корректно, закрыть форму невозможно (хотя кнопка закрытия реагирует каждый раз при нажатии и система не зависает, кнопки свернуть и развернуть работают корректно), а ошибок вообще никаких не выпадает. Кроме того, работать с этим ComboBox тоже можно, но как-то странно он работает – выбирать значения из списка во второй раз уже труднее – список моментально сворачивается.

    Подскажите, пожалуйста, с чем может быть вызвано такое поведение системы?

     

    И еще такой вопрос: Возможно ли реализовать подобное связывание для toolStripComboBox (у меня пока не получилось, выдает ошибку при компиляции)?

     

    Спасибо.

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 22:54 MSDN Forums consolidation (От:Visual C#)
    4 февраля 2010 г. 15:18

Ответы

  • Это вы указали тут

    this.comboBoxPERIOD.DisplayMember = "PERIOD";
    this.comboBoxPERIOD.ValueMember = "RECID";

    А ту строку видимо скопировали откуда то и предназначалась она для того, чтобы куда-нибудь биндить выбранный элемент. В общем удалите ту стоку, на которую я указал в первый раз, должно помочь.
    • Предложено в качестве ответа Denis Gladkikh 4 февраля 2010 г. 20:19
    • Помечено в качестве ответа I.Vorontsov 5 февраля 2010 г. 5:58
    4 февраля 2010 г. 17:05
  • Еще бы, сравните код, который я дал и который вы пишите, должно быть как то так:

    this.bindingSourcePERIOD.DataSource = this.DataSet;
    this.bindingSourcePERIOD.DataMember = TableName;
    this.toolStripComboBoxPERIOD.ComboBox.BindingContext = this.BindingContext;
    this.toolStripComboBoxPERIOD.ComboBox.DataSource = bindingSourcePERIOD;
    this.toolStripComboBoxPERIOD.ComboBox.DisplayMember = "PERIOD";
    this.toolStripComboBoxPERIOD.ComboBox.ValueMember = "RECID";
    this.toolStripComboBoxPERIOD.ComboBox.FormattingEnabled = true;

    [Мой блог], [LinkedIn]
    • Предложено в качестве ответа Denis Gladkikh 5 февраля 2010 г. 9:27
    • Помечено в качестве ответа I.Vorontsov 5 февраля 2010 г. 10:12
    5 февраля 2010 г. 9:27

Все ответы

  • Подозреваю, что проблема вот в этой строке -
    this.comboBoxPERIOD.DataBindings.Add(new Binding("SelectedValue", this.bindingSourcePERIOD.DataSource, this.bindingSourcePERIOD.DataMember, true));

    С какой целью она у вас?

    4 февраля 2010 г. 15:52
  • Создать связь (я так думаю). Указать какое свойство (в данном случае свойство SelectedValue) должно выводить данные из указанного поля PERIOD.

    4 февраля 2010 г. 16:31
  • Это вы указали тут

    this.comboBoxPERIOD.DisplayMember = "PERIOD";
    this.comboBoxPERIOD.ValueMember = "RECID";

    А ту строку видимо скопировали откуда то и предназначалась она для того, чтобы куда-нибудь биндить выбранный элемент. В общем удалите ту стоку, на которую я указал в первый раз, должно помочь.
    • Предложено в качестве ответа Denis Gladkikh 4 февраля 2010 г. 20:19
    • Помечено в качестве ответа I.Vorontsov 5 февраля 2010 г. 5:58
    4 февраля 2010 г. 17:05
  • Спасибо за совет. Это помогло. Работает.
    Но второй вопрос остается в силе: можно ли подобное связывание реализовать для
    toolStripComboBox (пока не получилось).

    4 февраля 2010 г. 20:09
  • а как пробовали и не получилось? Должно быть, что-то вроде

    this.tspcbxTest.ComboBox.BindingContext = this.BindingContext
    this.tspcbxTest.ComboBox.ValueMember = "RECID"
    this.tspcbxTest.ComboBox.DisplayMember = "PERIOD"
    this.tspcbxTest.ComboBox.FormattingEnabled = True
    this.tspcbxTest.ComboBox.DataSource = bindingSourcePERIOD;
    • Предложено в качестве ответа Denis Gladkikh 4 февраля 2010 г. 20:20
    4 февраля 2010 г. 20:18
  • Точно также как и с ComboBox, только вместо ComboBox указал this.toolStripComboBox

    private void MainForm2_Load(object sender, EventArgs e)

    {

    .......................

     

    this.bindingSourcePERIOD.DataSource = this.DataSet;

    this.bindingSourcePERIOD.DataMember = TableName;

    this.toolStripComboBoxPERIOD.DataSource = bindingSourcePERIOD;

    this.toolStripComboBoxPERIOD.DisplayMember = "PERIOD";

    this.toolStripComboBoxPERIOD.ValueMember = "RECID";

    }

    Возникают ошибки при компиляции.

    5 февраля 2010 г. 9:18
  • Еще бы, сравните код, который я дал и который вы пишите, должно быть как то так:

    this.bindingSourcePERIOD.DataSource = this.DataSet;
    this.bindingSourcePERIOD.DataMember = TableName;
    this.toolStripComboBoxPERIOD.ComboBox.BindingContext = this.BindingContext;
    this.toolStripComboBoxPERIOD.ComboBox.DataSource = bindingSourcePERIOD;
    this.toolStripComboBoxPERIOD.ComboBox.DisplayMember = "PERIOD";
    this.toolStripComboBoxPERIOD.ComboBox.ValueMember = "RECID";
    this.toolStripComboBoxPERIOD.ComboBox.FormattingEnabled = true;

    [Мой блог], [LinkedIn]
    • Предложено в качестве ответа Denis Gladkikh 5 февраля 2010 г. 9:27
    • Помечено в качестве ответа I.Vorontsov 5 февраля 2010 г. 10:12
    5 февраля 2010 г. 9:27
  • Появляются ошибки в процессе компиляции для всех инициализируемых свойств объекта. Например, для 'BindingContext' пишет:

    'System.Windows.Forms.ToolStripComboBox' does not contain a definition for 'BindingContext' and no extension method 'BindingContext' accepting a first argument of type 'System.Windows.Forms.ToolStripComboBox' could be found (are you missing a using directive or an assembly reference?)       

    То же самое писал и без добавления BindingContext и  FormattingEnabled для свойств DataSource, DisplayMember, ValueMember. Поэтому раньше тоже не получалось сделать сборку.

    Может еще что-нибудь нужно добавить, чтобы проинициализировать эти свойства?

    5 февраля 2010 г. 14:24
  • Видимо вы даже не пытались перевести ошибку! А там ведь все ясно написано...
    5 февраля 2010 г. 16:23
  •  Недосмотрел ComboBox, поэтому поначалу не вышло. сейчас работает. Спасибо за помощь.
    5 февраля 2010 г. 16:48
  • просто опыт разработок пока невелик. но это дело наживное :)
    5 февраля 2010 г. 16:49