Привязка данных ComboBox - PullRequest
       11

Привязка данных ComboBox

2 голосов
/ 21 декабря 2011

У меня есть элемент управления со списком в форме, который извлекает его данные (дисплеи и значения) из некоторого источника данных. С другой стороны у меня есть стол с одним рядом. Я хочу, чтобы приложение запускалось, выпадающий список устанавливал значение selectedvalue или selecteditem на значение одного столбца в строке выше. И когда пользователь изменил комбинированный список, он сохранит изменение в строке. Я пытался привязать SelectedValue к этому столбцу, но он не работает. Combobox просто устанавливает на начало первого элемента. В чем проблема?


EDIT

Это проект Win Forms. Вот обязательный код:

this.comboBoxCountries = new System.Windows.Forms.ComboBox();
this.countriesBindingSource = new System.Windows.Forms.BindingSource(this.components);

// 
// comboBoxCountries
// 
this.comboBoxCountries.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.searchCriteriaBindingSource, "Postcode", true));
this.comboBoxCountries.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.searchCriteriaBindingSource, "CountryCode", true));
this.comboBoxCountries.DataSource = this.countriesBindingSource;
this.comboBoxCountries.DisplayMember = "Name";
this.comboBoxCountries.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxCountries.FormattingEnabled = true;
this.comboBoxCountries.Location = new System.Drawing.Point(190, 19);
this.comboBoxCountries.Name = "comboBoxCountries";
this.comboBoxCountries.Size = new System.Drawing.Size(156, 21);
this.comboBoxCountries.TabIndex = 2;
this.comboBoxCountries.ValueMember = "Code";
this.comboBoxCountries.SelectedValueChanged += new System.EventHandler(this.comboBoxCountries_SelectedValueChanged);

// 
// countriesBindingSource
// 
this.countriesBindingSource.DataMember = "Countries";
this.countriesBindingSource.DataSource = this.dbDataSetCountries;
// 
// dbDataSetCountries
// 
this.dbDataSetCountries.DataSetName = "dbDataSetCountries";
this.dbDataSetCountries.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;

// 
// searchCriteriaBindingSource
// 
this.searchCriteriaBindingSource.AllowNew = false;
this.searchCriteriaBindingSource.DataMember = "SearchCriteria";
this.searchCriteriaBindingSource.DataSource = this.dbDataSetSearchCriteria;
this.searchCriteriaBindingSource.BindingComplete += new System.Windows.Forms.BindingCompleteEventHandler(this.searchCriteriaBindingSource_BindingComplete);
// 
// dbDataSetSearchCriteria
// 
this.dbDataSetSearchCriteria.DataSetName = "dbDataSetSearchCriteria";
this.dbDataSetSearchCriteria.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;

EDIT2

Как я уже упоминал в своем комментарии ниже, у меня есть еще один textbox, который связан с другим DataMember того же источника привязки и textbox работает нормально. Это появляется с соответствующим значением. Когда я изменяю DataMember в том же самом датаболее, для которого я установил свойство selectedvalue привязки в выпадающем списке, это также показывает хороший результат и работает правильно.

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

Ответы [ 2 ]

5 голосов
/ 21 декабря 2011

Посмотрите на свойства DisplayMember и ValueMember в выпадающем списке. Вы должны указать ComboBox, какой элемент из источника данных отображать в раскрывающемся списке, и какое значение дать при запросе SelectedValue.

Похоже, ваш ComboBox связан со статическим списком, а ваши строки - нет. Вы можете рассмотреть возможность использования BindingSource, для которого вы устанавливаете ComboBox и DataSrid DataGridView. Таким образом, когда DGV переходит к новой строке, ComboBox будет обновляться со значением для новой строки.

Вот ссылка на ComboBox на MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.aspx

3 голосов
/ 22 декабря 2011

Я это выяснил. Поэтому для решения этой проблемы вы должны удалить привязку данных SelectedValue из меню привязки данных Visual Studio и поместить соответствующий код, чтобы добавить эту привязку данных в некотором месте после заполнения всех источников привязки:

private void MainForm_Load_1(object sender, EventArgs e)
{
    this.searchCriteriaTableAdapter1.Fill(this.dbDataSetCountries.SearchCriteria);    

    this.searchCriteriaTableAdapter.Fill(this.dbDataSetSearchCriteria.SearchCriteria);    

    comboBoxCountries.DataBindings.Add("SelectedValue", this.dbDataSetCountries.SearchCriteria, "CountryCode");                
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...