2009-08-02 5 views
2

J'ai une liste déroulante avec des colonnes Id, Name. J'ai ajouté ces valeurs à combobox avec datatable:C# Winform: Convertit la propriété ValueMember de Combobox en longue

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

Id colonne devrait être une longue. Cependant, quand j'ai essayé d'obtenir la valeur Id, il est impossible de convertir en long:

long id; 
id = this.comboBox1.ValueMember; 

Comment faire?

Merci.


@BlueMonkMN, presque là, mais quand j'ai essayé imprime MessageBox.Show 1 (de mes valeurs DataTable ci-dessus)

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

mais cette ligne

id = (long)(comboBox1.SelectedValue); 

Déclenche une exception casting?

Pourquoi 1 ne peut pas être converti en long?

+0

Connaissez-vous bien ValueMember? – adatapost

Répondre

3

Tout d'abord, assurez-vous qu'un entier long est ce dont vous avez besoin. Un entier normal (int) est spécifié dans le DataTable en tant que Systemn.Int32 et fonctionne généralement mieux sur les systèmes d'exploitation 32 bits. La plage de cet entier va de -2 147 483 648 à 2 147 483 647. Si en fait vous avez besoin de plus grands entiers que cela, alors allez-y et utilisez System.Int64 dans le DataTable et long dans votre code.

Ensuite, vous essayez d'accéder à la mauvaise propriété de la zone de liste déroulante. Vous devez accéder à la propriété SelectedValue. ValueMember est la propriété qui détermine quelle colonne/propriété de l'objet lié sera exposée par la propriété SelectedValue.

Voici un code illustrant à peu près comment la zone de liste déroulante doit être configuré: (code généré à partir 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; 

Et voici un code illustrant comment récupérer la valeur sélectionnée dans la zone de liste déroulante, si fait, vous voulez que l'identifiant soit un entier long:

 long id = (long)(comboBox1.SelectedValue); 
1

ValueMember est une chaîne datatpye propriété et représente un nom de colonne. OP doit utiliser la propriété SelectedValue.

+0

Merci j'ai fait une erreur, mais même avec selectedvalue je ne peux pas convertir en long. – programmernovice

+0

Utilisez, long p = long.Parse (comboBox1.SelectedValue.ToString()); – adatapost

Questions connexes