C # Winform: конвертировать свойство Combobox ValueMember в long

2

У меня есть поле со списком с 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?

  • 0
    Знаете ли вы о недвижимости ValueMember?
Теги:
winforms

2 ответа

3
Лучший ответ

Прежде всего, убедитесь, что длинное целое - это то, что вам нужно. Регулярное целое число (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);
1

ValueMember - это свойство string datatpye и представляет собой имя столбца. OP должен использовать свойство SelectedValue.

  • 0
    Спасибо, что сделал ошибку, но даже с выбранным значением я не могу конвертировать в long.
  • 0
    Use, long p = long.Parse (comboBox1.SelectedValue.ToString ());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню