C#Winform:将Combobox ValueMember属性转换为long

时间:2009-08-02 13:05:37

标签: c# winforms

我有一个带有Id,Name列的组合框。我已将这些值添加到带有数据表的组合框:

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

Id列应该很长。但是,当我尝试获取Id值时,它表示无法转换为long:

long id;
id = this.comboBox1.ValueMember;

怎么做?

感谢。


@BlueMonkMN,几乎就在那里,但当我尝试MessageBox.Show打印1(来自我上面的数据表值)

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

但这一行

    id = (long)(comboBox1.SelectedValue);

抛出强制转换异常?

为什么1无法转换为长?

2 个答案:

答案 0 :(得分:3)

首先,确保您需要一个长整数。在DataTable中将常规整数(int)指定为Systemn.Int32,并且通常在32位操作系统上最佳。该整数的范围是-2,147,483,648到2,147,483,647。如果实际上你需要更大的整数,那么请继续使用DataTable中的System.Int64,并在代码中使用。

接下来,您尝试访问组合框的错误属性。您需要访问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 :(得分:1)

ValueMember是一个字符串datatpye属性,它表示列的名称。 OP必须使用SelectedValue属性。