У меня есть поле со списком с Id, столбцами Name. Я добавил эти значения в combobox с datatable:
DataTable.Rows.Add(1, "Name1");
DataTable.Rows.Add(2, "Name2");
Столбец Id должен быть длинным. Однако, когда я пытался получить значение Id, он говорит, что не может преобразовать в long:
long id;
id = this.comboBox1.ValueMember;
Как это сделать?
Спасибо.
@BlueMonkMN, почти там, но когда я попробовал MessageBox.Show печатает 1 (из моих данных datatable выше)
MessageBox.Show(comboBox1.SelectedValue.ToString());
но эта строка
id = (long)(comboBox1.SelectedValue);
выбрасывает исключение литья?
Почему 1 нельзя преобразовать в long?
Прежде всего, убедитесь, что длинное целое - это то, что вам нужно. Регулярное целое число (int) указано в DataTable как Systemn.Int32 и в целом работает лучше всего на 32-разрядных операционных системах. Диапазон этого целого составляет от -2,147,483,648 до 2,147,483,647. Если на самом деле вам понадобятся большие целые числа, то перейдите к использованию и используйте System.Int64 в DataTable и долго в вашем коде.
Затем вы пытаетесь получить доступ к неправильному свойству поля со списком. Вам нужно получить доступ к свойству SelectedValue. ValueMember - это свойство, которое определяет, какой элемент/столбца связанного объекта будет отображаться свойством SelectedValue.
Вот несколько примеров, иллюстрирующих примерно то, как должен быть сконфигурирован поле со списком: (Сгенерированный код из InitializeComponent)
this.dataTable1BindingSource = new System.Windows.Forms.BindingSource(this.components);
this.dataSet11 = new WindowsFormsApplication1.DataSet1();
//
// comboBox1
//
this.comboBox1.DataSource = this.dataTable1BindingSource;
this.comboBox1.DisplayMember = "Name";
this.comboBox1.ValueMember = "id";
//
// dataTable1BindingSource
//
this.dataTable1BindingSource.DataMember = "DataTable1";
this.dataTable1BindingSource.DataSource = this.dataSet11;
И вот некоторый код, иллюстрирующий, как вы извлекаете выбранное значение из поля со списком, если на самом деле вы хотите, чтобы id был длинным целым числом:
long id = (long)(comboBox1.SelectedValue);
ValueMember - это свойство string datatpye и представляет собой имя столбца. OP должен использовать свойство SelectedValue.