2011-12-04 3 views
6

Sto cercando di ottenere i dati dal database in base all'elemento selezionato nello ComboBox ma quando provo ad accedere all'elemento selezionato ComboBox esso mi dà "System.Data.DataRowView "Ottenere System.Data.DataRowView mentre si ottiene il valore da ComboBox

ho fatto la stessa cosa con una semplice query di selezione in un'altra funzione e che funziona bene, ma non so il motivo per cui non funziona in questa query [...?]:

_dataAdapter.SelectCommand.CommandText = "SELECT lt.Name FROM Leader as lt LEFT JOIN Material as mt ON lt.Student_id=mt.lead_id where lt.Name=" + "'" + cmbLeader.SelectedItem.ToString() + "'"; 

Qualcuno può dirmi quale potrebbe essere il problema?

risposta

14

SelectedItem è l'oggetto dati associato all'origine dati ComboBox, che in questo caso è DataRowView.

È necessario trasmettere SelectedItem a DataRowView, quindi recuperare il valore appropriato da esso.

È possibile farlo nel modo seguente:

DataRowView oDataRowView = cmbLeader.SelectedItem as DataRowView; 
string sValue = ""; 

if (oDataRowView != null) { 
    sValue = oDataRowView.Row["YourFieldName"] as string; 
} 

quindi sostituire (nella CommandText):

cmbLeader.SelectedItem.ToString() 

con:

sValue 

Ciò garbo gestire il caso in cui DataRowView è zero.

YourFieldName nel codice precedente deve essere il nome del campo nell'origine dati che contiene il valore Nome. Se hai impostato il nome di questo campo nelle proprietà DisplayMember o ValueMember della casella combinata, puoi utilizzare questa proprietà per risparmiare un po 'di carenza quando questo campo cambia o quando desideri riutilizzare altrove questo codice:

sValue = oDataRowView.Row[cmbLeader.DisplayMember] as string; 

In alternativa, è possibile utilizzare cmbLeader.SelectedValue.

+0

Ho provato ad utilizzare SelectedValue ancora ottengo System.Data.DataRowView, come posso trasmettere dal SelectedItem a DataRowView – jarus

+0

thanx ho trovato il modo di lanciare SelectedItem a DataRowView String str = ((DataRowView) cmbLeader.SelectedItem) [ "Nome"] ToString().; – jarus

+0

@jarus: aggiornata la risposta con i dettagli sul casting su DataRowView. –

1

Quando si esegue il binding su un ADO DataTable si è realmente vincolanti per un ADO DataView (che è una raccolta di DataRowViews). Ciò significa che SelectedItem sarà sempre un DataRowView.

Per ottenere il DataRow associato è possibile chiamare

DataRow row = ((DataRowView)SelectedItem).Row 
0

Questo per DropDownList. Molti sviluppatori vogliono ottenere il valore di Membro dei dati dal menu a tendina sotto la funzione aiuterà a ottenere il valore in modo semplice ... se qualsiasi commento di suggerimento sotto!

public string RadDropDownSelectValue(RadDropDownList radDropDownList) 
    { 
     string str = ""; 
     foreach (RadListDataItem item in radDropDownList.SelectedItems) 
     { 
      DataRowView dv = (DataRowView)item.Value; 
      str = dv.Row[0].ToString(); 
     } 
     return str; 
    }