Frage

Edit 1

Ich glaube, mein Problem aus den folgenden Stämmen. Die Funktion, die auf den Dropdown-Teil füllt setzt die Anzeige Mitglied in den CountyName. Dann, wenn ich versuche, und stellen Sie die SelectedText oder EditValue, wie vorgeschlagen wurde, dass Funktion gibt nur die CountyID, die es versuchen, etwas in der Dropdown-Liste Display übereinstimmen. Ich brauche es in der Liste etwas Valuemember zu entsprechen.

Mit der folgenden habe ich es zu arbeiten, aber es ist ein HACK und ich sehr zu schätzen würde eine echte Lösung zu finden.

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

Original Beitrag

Ich habe eine Lookup-Box (DevExpress) auf einem Element Form, dass ich die möglichen Werte in der DB mit diesem Code füllen ->

        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;

Das funktioniert ganz gut, wie die CountyName wie erwartet angezeigt werden.

Allerdings, wenn ich versuche und lade das Wert einer vorhandenen Mitglieds für dieses Feld des unter Verwendung, der Teil einer Funktion, die eine Zeile aus dem DataSet nimmt ->

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

erhalte ich eine leere Box. Ich habe durch den Code trat und die korrekte ID wird für das Element zurückgegeben.

Leider zieht mit der Spalten „CountyName“ & „CountyID“ von einer Wartungstabelle der gespeicherte Prozedur, um die Drop-Down-Optionen zu füllen. So ist das richtig. Leider zieht von der Person Tabelle der gespeicherten Prozedur einer bestimmten Person des aktuellen Kreis zu laden, wo es eine Spalte „ResidencyCountyID“ genannt wird. Es wird so genannt, weil es auch eine „ResponsibilityCountyID“ -Spalte ist.

Ich brauche einen Weg für sie beide koexistieren, keine Lösungen?

Danke!

War es hilfreich?

Lösung

Display und Valuemember werden verwendet, um die Steuerung mit der Liste der auswählbaren Werte aufzufüllen. Um den ausgewählten Wert eines besiedelten LookUpEdit Steuerung eingestellt, setzen Sie den EditValue Eigenschaft:

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

Als Antwort auf Ihre edit: Nach der Dokumentation:

  

Die aktuell ausgewählten Zeilen ermitteln Werte für den Wert bearbeiten und Anzeigetext-Editor. Der Wert für BaseEdit.EditValue wird aus dem RepositoryItemLookUpEditBase.ValueMember Feld erhalten wird, während der Text in dem Textfeld angezeigt werden vom RepositoryItemLookUpEditBase.DisplayMember Feld der ausgewählten Zeile erhalten wird.

     

Wenn Sie BaseEdit.EditValue ändern,   der Editor lokalisiert und wählt die Zeile   deren   RepositoryItemLookUpEditBase.ValueMember   Feld enthält den neuen Wert. Der Text   in dem Eingabefeld wird zu reflektieren geändert   die neu gewählte Zeile.

Ich verwende diese Kontrollen nicht, aber es klingt für mich, dass es nicht funktioniert werden soll, wie Sie beschrieben. Ich denke, die ToString () ist das Problem, weil EditValue ein Objekt übernimmt, so dass es wahrscheinlich ist ein int für den Wert zu erwarten. Versuchen Sie:

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

Andere Tipps

Die Valuemember Eigenschaft erzählt die Liste, was Feld aus zu ziehen, wenn die Value-Eigenschaft einstellen. Sobald Sie die Valuemember auf „CountyID“ festgelegt haben, dann, wenn die Liste Databound ist, setzt sie die alle Listenelemente Werteigenschaften zu ihren Respekt Objekte CountyID Felder aus.

Damit Sie nicht tun sollten:

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

, sondern

lkuResidenceCounty.Properties.ValueMember = "CountyID";

war völlig in Ordnung, so lange wie Sie korrekt das Feld identifiziert haben Sie versuchen zu Databind. Sobald die Databound-Liste erhalten, sollten Sie die Ergebnisse sehen Sie erwarten.

Nachdem jedoch in Ihrem Code suchen, scheint es, dass Sie Ihr Feld sind unpassende. In einem Ort, den Sie verwenden ResidencyCountyID und in einem anderen Sie verwenden CountyID. Das ist höchstwahrscheinlich Ihre Quelle der Verwirrung. Finde heraus, was der tatsächliche Feldname ist und stellen Sie sicher, dass Sie die Valuemember zu, dass festgelegt.

UPDATE

Nachdem Sie Ihren Kommentar zu lesen, was Ihr suchen, ist die SelectedValue Eigenschaft. Die SelectedValue Eigenschaft, um die Liste zeigt, um den ausgewählten Wert zu zwingen, was auch immer Eingabe geben Sie es.

Im Wesentlichen haben Sie zwei Dinge geht hier vor. Valuemember erzählt die Liste, was als der Wert aus der Datenquelle zu verwenden, und SelectedValue die erzählt die Liste, was die aktuell ausgewählte Wert sein sollte.

Warum ist es, dass Sie die gleiche LookUpEdit benötigen zwei Werte Mitglieder haben? Ist es eigenständig oder in einem Raster verwendet? Wenn eigenständige, könnten Sie die beiden Repository-Editoren tauschen je nach der aktuellen Zeile. Aber gibt es mehr als zwei mögliche Werte für die Valuemember? Das würde auch die Dinge komplizieren.

UPDATE

Ein Blick auf Ihre bearbeiten, ich glaube, ich verstehe, was auf ein wenig mehr los ist. Also, wollen Sie nicht Ihre Valuemember (was eine Datenspalte bezeichnet) ändern, sondern den Wert des Editors ändern? Wenn ja, dann sollten Sie auf jeden Fall verwenden EditValue (nicht SelectedText, die ich glaube nicht, soll eingestellt werden), und weisen es die Zeile [ „value_field“] wie folgt:

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

Was passiert, wenn Sie das tun?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top