C # Winform: конвертировать свойство Combobox ValueMember в long - PullRequest
2 голосов
/ 02 августа 2009

У меня есть поле со списком Id, Name. Я добавил эти значения в комбинированный список с данными:

        DataTable.Rows.Add(1, "Name1");
        DataTable.Rows.Add(2, "Name2");

Идентификатор столбца должен быть длинным. Однако, когда я попытался получить значение Id, он говорит, что не может конвертировать в long:

long id;
id = this.comboBox1.ValueMember;

Как это сделать?

Спасибо.


@ BlueMonkMN, почти там, но когда я попробовал MessageBox.Show печатает 1 (из моих значений данных выше)

        MessageBox.Show(comboBox1.SelectedValue.ToString());

но эта строка

    id = (long)(comboBox1.SelectedValue);

выдает исключение приведения?

Почему 1 нельзя преобразовать в long?

Ответы [ 2 ]

3 голосов
/ 02 августа 2009

Прежде всего, убедитесь, что вам нужно длинное целое число. Обычное целое число (int) указывается в DataTable как Systemn.Int32 и обычно лучше всего работает в 32-разрядных операционных системах. Диапазон этого целого числа составляет от -2 147 483 648 до 2 147 483 647. Если на самом деле вам нужны целые числа большего размера, тогда используйте System.Int64 в DataTable и long в своем коде.

Далее вы пытаетесь получить доступ к неправильному свойству поля со списком. Вам необходимо получить доступ к свойству 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;

А вот код, иллюстрирующий, как вы извлекаете выбранное значение из поля со списком, если на самом деле вы хотите, чтобы идентификатор был длинным целым числом:

     long id = (long)(comboBox1.SelectedValue);
1 голос
/ 02 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...