ComboBox.ValueMember и DisplayMember - PullRequest
       17

ComboBox.ValueMember и DisplayMember

3 голосов
/ 01 марта 2012

Как мне установить эти значения? У меня есть DataTable со всеми данными, которые я хочу установить в выпадающем списке, но я не могу найти, как его установить.

Я пытался

ComboBox1.DataSource = dataTable;
ComboBox1.ValueMember = "id"; // --> once hes here, he just jumps out the method
ComboBox1.DisplayMember = "name";

Нет ошибки компиляции, предупреждение, ничего ... просто выскакивает!

Это запрос для заполнения таблицы данных

"Select * from \"Table\""

Я проверил с помощью отладчика, и данные были заполнены. Имена столбцов: «id» и «name». ComboBox пуст. Я заполняю его впервые!

Ответы [ 8 ]

22 голосов
/ 24 сентября 2014

Вы не должны устанавливать datasource вашего списка и / или комбинированного списка в этом порядке

ComboBox1.DataSource = dataTable;

ComboBox1.ValueMember = "id"; 

ComboBox1.DisplayMember = "name";

Вместо этого, это правильный порядок:

ComboBox1.ValueMember = "id"; 

ComboBox1.DisplayMember = "name";

ComboBox1.DataSource = dataTable;

ПРИМЕЧАНИЕ: установка datasource должна быть последней строкой.

Если вы сначала установите datasource, событие SelectedIndexChanged сработает, и вы можете получить ошибку приведения или другое исключение.

3 голосов
/ 01 марта 2012
  ComboBox1.DataSource= dt; //the data table which contains data
  ComboBox1.ValueMember = "id";   // column name which you want in SelectedValue
  ComboBox1.DisplayMember = "name"; // column name that you need to display as text
2 голосов
/ 01 марта 2012

Они берут струны ...

ComboBox1.ValueMember = "id"; 
ComboBox1.DisplayMember = "name";
1 голос
/ 20 февраля 2017

Использование пар значений ключей для заполнения поля со списком

Оптимальный способ заполнить поля со списком - установить источник данных в список пар значений ключа. Это также может вдохновить использование данных, хранящихся в каком-либо списке:

//Some values to show in combobox
string[] ports= new string[3] {"COM1", "COM2", "COM3"};

//Set datasource to string array converted to list of keyvaluepairs
combobox.Datasource = ports.Select(p => new KeyValuePair<string, string>(p, p)).ToList();

//Configure the combo control
combobox.DisplayMember = "Key";
combobox.ValueMember = "Value";
combobox.SelectedValue = ports[0];

Источник данных также может быть заполнен с использованием этого синтаксиса:

ports.Select(p => new { Key = p, Value = p }).ToList();

Техника может быть расширена за счет дополнительных имен свойств для нескольких списков столбцов.

1 голос
/ 19 января 2016

У меня была такая же проблема.В моем случае событие SelectedIndexChanged срабатывает и просто выпрыгивает из метода.Попробуйте не использовать событие SelectedIndexChanged.Или как-то так:

ComboBox1.SelectedIndexChanged -= new System.EventHandler(ComboBox1_SelectedIndexChanged); 
ComboBox1.DataSource = dataTable; 
ComboBox1.ValueMember = "id";  
ComboBox1.DisplayMember = "name";
ComboBox1.SelectedIndexChanged += new System.EventHandler(ComboBox1_SelectedIndexChanged);

У меня это сработало.=)

1 голос
/ 13 декабря 2014
public class ComboDeger {
    private string yazi;
    private int deger;
    public ComboDeger(string stryazi, int strdeger) {
        this.yazi = stryazi;
        this.deger = strdeger;
    }
    public string yazisi {
        get {
            return yazi;
        }
    }
    public int degeri {
        get {
            return deger;
        }
    }
}
private void combobox_doldur() {
    ArrayList ComboDegerleri = new ArrayList();
    ComboDegerleri.Add(new ComboDeger("9 : NORMAL", 9));
    ComboDegerleri.Add(new ComboDeger("10 : ENGELLİ", 10));
    comboBox1.DataSource = ComboDegerleri;
    comboBox1.DisplayMember = "yazisi";
    comboBox1.ValueMember = "degeri";
}
private void Form3_Load(object sender, EventArgs e) {
    con.Open();
    combobox_doldur();

    // Populate the COMBOBOX using an array as DataSource.
}
0 голосов
/ 19 января 2018
ComboBox1.ValueMember = dataTable.Columns["id"].ColumnsName;   // column name which the values are not visible 
ComboBox1.DisplayMember = dataTable.Columns ["name"].ColumnsName;
 /* 
       column name that you need to select item by proprity : 
ComboBox1.SelectedItem; 
Or   you can use easly this : 
ComboBox1.Text; 
*/

ComboBox1.DataSource= dataTable; //the data table which contains data 
// and this should be last :)
0 голосов
/ 01 марта 2012

вы можете указать вот так

  ComboBox1.ValueMember = "id";  
  ComboBox1.DisplayMember = "name"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...