Domanda

Modifica 1

Credo che il mio problema derivi da quanto segue. La funzione che riempie la parte a discesa imposta il Membro di visualizzazione su CountyName. Quindi, quando provo ad impostare SelectedText o EditValue, come è stato suggerito, quella funzione restituisce solo il CountyID che tenta di abbinare a qualcosa nell'elenco DropDown DisplayMember. Ne ho bisogno per abbinarlo a qualcosa nell'elenco ValueMember.

Usando quanto segue l'ho fatto funzionare ma è un HACK e apprezzerei molto trovare una soluzione reale.

lkuResidenceCounty.ItemIndex = Convert.ToInt32(row["ResidencyCountyID"].ToString());

Post originale

Ho una casella di ricerca (DevExpress) su un modulo membro in cui riempio i possibili valori dal DB con questo codice - >

        lkuResidenceCounty.Properties.DataSource = ConnectBLL.BLL.Person.CountyList();
        lkuResidenceCounty.Properties.PopulateColumns();
        lkuResidenceCounty.Properties.DisplayMember = "CountyName";
        lkuResidenceCounty.Properties.ValueMember = "CountyID";
        lkuResidenceCounty.Properties.Columns[0].Visible = false;
        lkuResidenceCounty.Properties.Columns[2].Visible = false;
        lkuResidenceCounty.Properties.Columns[3].Visible = false;

Funziona bene poiché CountyName viene visualizzato come previsto.

Tuttavia, quando provo a caricare un valore di un membro esistente per questo campo usando il seguito, che fa parte di una funzione che prende una riga dal DataSet - >

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();

Ottengo una casella vuota. Ho esaminato il codice e l'ID corretto è stato restituito per il membro.

Sfortunatamente la procedura memorizzata per riempire le opzioni del menu a discesa estrae da una tabella di manutenzione con le colonne "CountyName" & Amp; & Quot; CountyID " ;. Quindi è corretto. Sfortunatamente, la procedura memorizzata per caricare l'attuale contea di una persona specifica viene estratta dalla tabella delle persone in cui è presente una colonna denominata "ResidencyCountyID". È così chiamato perché esiste anche un " ResponsibilityCountyID " colonna.

Ho bisogno di un modo per far convivere entrambi, qualche soluzione?

Grazie!

È stato utile?

Soluzione

DisplayMember e ValueMember vengono utilizzati per popolare il controllo con l'elenco di valori selezionabili. Per impostare il valore selezionato di un controllo LookUpEdit popolato, imposta EditValue proprietà:

lkuResidenceCounty.EditValue = row["ResidencyCountyID"].ToString();

In risposta alla tua modifica: secondo la documentazione:

  

La riga attualmente selezionata determina i valori per il valore di modifica dell'editor e visualizza il testo. Il valore per BaseEdit.EditValue è ottenuto dal campo RepositoryItemLookUpEditBase.ValueMember, mentre il testo da visualizzare nella casella di modifica è ottenuto dal campo RepositoryItemLookUpEditBase.DisplayMember della riga selezionata.

     

Quando cambi BaseEdit.EditValue,   l'editor individua e seleziona la riga   di chi   RepositoryItemLookUpEditBase.ValueMember   campo contiene il nuovo valore. Il testo   nella casella di modifica è cambiato per riflettere   la riga appena selezionata.

Non uso questi controlli ma mi sembra che non dovrebbe funzionare come descritto. Penso che ToString () sia il problema perché EditValue accetta un oggetto, quindi probabilmente si aspetta un int per il valore. Prova:

lkuResidenceCounty.EditValue = (int)row["ResidencyCountyID"];

Altri suggerimenti

La proprietà ValueMember indica all'elenco da quale campo estrarre quando si imposta la proprietà Value. Dopo aver impostato ValueMember su " CountyID " ;, quindi quando l'elenco è Databound, imposterà tutte le proprietà di valore degli elementi dell'elenco sui campi CountyID dei rispettivi oggetti.

Quindi, non dovresti fare:

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();

ma piuttosto

lkuResidenceCounty.Properties.ValueMember = "CountyID";

andava benissimo, a patto che tu abbia identificato correttamente il campo che stai cercando di individuare. Una volta che l'elenco è diventato il database, dovresti vedere i risultati che ti aspetti.

Tuttavia, dopo aver visto il tuo codice, sembra che tu non stia rispettando il tuo campo. In un posto stai usando ResidencyCountyID e in un altro stai usando CountyID. Questa è probabilmente la tua fonte di confusione. Scopri qual è il nome del campo effettivo e assicurati di impostare ValueMember su quello.

Aggiorna

Dopo aver letto il tuo commento, quello che stai cercando è la proprietà SelectedValue. La proprietà SelectedValue indica all'elenco di forzare il valore selezionato su qualsiasi input tu gli abbia fornito.

Essenzialmente hai due cose da fare qui. ValueMember indica all'elenco cosa utilizzare come valore dall'origine dati e SelectedValue che indica all'elenco quale dovrebbe essere il valore attualmente selezionato.

Perché è necessario lo stesso LookUpEdit per avere due membri di valore? Viene utilizzato da solo o in una griglia? Se autonomo, è possibile scambiare i due editor del repository in base alla riga corrente. Ma ci sono più di 2 possibili valori per ValueMember? Ciò complicherebbe anche le cose.

UPDATE

Guardando la tua modifica, penso di capire cosa sta succedendo un po 'di più. Quindi, non desideri modificare ValueMember (che fa riferimento a una colonna di dati), ma piuttosto modificare il valore dell'editor? In tal caso, dovresti assolutamente utilizzare EditValue (non SelectedText, che non credo debba essere impostato) e assegnarlo alla riga [" value_field "] in questo modo:

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

Cosa succede quando lo fai?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top