2009-08-02 37 views
2

我有一个带有Id,Name列的组合框。我已将这些值添加到具有数据表的组合框中:C#Winform:将Combobox ValueMember属性转换为long

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

Id列应该很长。然而,当我试图让ID值,它说不能转换为长:

long id; 
id = this.comboBox1.ValueMember; 

如何做到这一点?

谢谢。


@BlueMonkMN,几乎没有但是当我试图MessageBox.Show打印1(从我的数据表值以上)

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

,但此行

id = (long)(comboBox1.SelectedValue); 

抛出一个转换异常?

为什么1不能转换为长?

+0

你知道ValueMember属性吗? – adatapost 2009-08-02 13:37:45

回答

3

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

接下来,您试图访问组合框的错误属性。您需要访问SelectedValue属性。 ValueMember是确定BoundValue属性的哪个列/属性将被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是datatpye属性的字符串,它代表列的名称。 OP必须使用SelectedValue属性。

+0

谢谢我犯了一个错误,但即使对于selectedvalue,我也无法将其转换为long。 – programmernovice 2009-08-02 13:46:42