2009-07-21 11 views
2

Ich habe eine Combobox, aber ich möchte es zwei verschiedene Spaltenwerte aus der Datenquelle zeigen.C# ASP.NET - Füllen Sie eine Combobox, um zwei Werte aus einer Datenquelle anzuzeigen?

Also anstatt es einfach mit "rowid" (mögliche Werte "1", "2", "3" usw.) zu füllen, würde ich gerne "letter" ("a", "b", " c ") Spalte, aber in der gleichen Box.

Der tatsächliche Wert, den es sendet, kann genau dieser Rowid-Wert sein, aber für benutzerfreundliche Zwecke brauche ich beides.

this.comboBox1.DataSource = this.tblIDSourceBindingSource; 
this.comboBox1.DisplayMember = "rowid"; 
this.comboBox1.FormattingEnabled = true; 
this.comboBox1.Name = "comboBox1"; 
this.comboBox1.ValueMember = "rowid"; 

So wie Sie sehen können, wird es angezeigt "Rowid". Zu versuchen, es zu sagen, um "Buchstabe" zusätzlich anzuzeigen, wirft alles ab.

+0

so nimmt Sie möchten, dass das Drop-down-Menü 2 Spalten anstelle der Standard 1-Spalte anzeigt? –

+0

können Sie die 2 Spalten vorhand verknüpfen und an diese anstelle Ihrer aktuellen Datenquelle binden. –

+0

2 Spalten würden Sinn machen, nehme ich an! Stan R .: Wenn Sie meinen, die Datenbank zu ändern, kann ich nicht. – scrot

Antwort

2

Annahme: Sie können nicht einfach "Brief" anzeigen und damit fertig sein.

Ihre proc, dass statt ändern, so

select rowid, letter, blah 
from table 

etwas tun, wie

select rowid + ' ' + letter as display, rowid, letter, blah 
from table 

Oder wenn Sie den Raum nicht wie, verwenden Sie das Trennzeichen (en) Ihrer Wahl (Rohr , Schrägstrich, Zeilenumbruch in Klammern, usw.).

dann verwenden Sie "display" als Ihr DisplayMember.

p.s. Wenn Rowid ein Int ist, müssen Sie CAST oder CONVERT verwenden, um es zu einem Nvarchar oder Varchar zu machen.

S.p.s. wenn Sie nicht Ihre proc ändern können, dann der lange Weg ist es, eine Lichteinheit zu schaffen, die die gleichen wie Ihre Rückkehr, aber fügen Sie eine Nur-Lese-Eigenschaft namens Anzeige deren get ist so etwas wie

return string.Format("{0}{1}{2}", this.rowid, delimiterOfChoice, this.letter); 

oder etwas diese Natur.

Dann verwenden Sie stattdessen eine Sammlung dieser Entitäten als Bindingsource.

+0

Warum der Downvote? Dies scheint eine vollkommen lebensfähige Lösung zu sein. Bitte kommentieren Sie, wenn Sie die Antwort von jemandem runterladen –

+0

Drive by downvote. Ich habe es gewählt. – scrot

+0

Vielleicht jemand, der andere abweist, um ihre eigene Antwort zu bekommen. – scrot

0

Als schnelle und schmutzige Hack, sollten Sie in der Lage sein, eine neue Spalte zu Ihrer Datentabelle hinzufügen, sobald es aus der Datenbank gefüllt ist. Blättern Sie durch die Tabelle und erstellen Sie die Zeichenfolge, die Sie für jede Zeile anzeigen möchten, und fügen Sie sie in Ihre neue Spalte ein. Dann binden Sie es, um diesen Wert stattdessen anzuzeigen.

+0

Warum nicht einfach den Buchstaben + '' + Rowid wählen? oder Buchstabe + '/' + Rowid? Diese Spalte ist nicht erforderlich, da sie für die Daten selbst nicht relevant ist. (tat nicht BTW) –

+0

Ich auch nicht. Wie ich schon sagte, es war wahrscheinlich der Top-Wahl-Getter tun. – scrot

+0

Ich habe abgestimmt - gut die erste Zeile war "schnell und schmutzig hack" shouhld genug gewesen. Sie würden so viele Probleme hinzufügen, müssen die neue db-Spalte pflegen, warum nicht die Tools verwenden, die da sind? Auch Datasource ist nicht immer = Datenbank – Adrian

3

müssen Sie das Format Veranstaltung overide

// FormatString property is shown in the designer, so you can provide 
    // some designer support. If you are not using the desinger then you 
    // either set it in the form/control ctor, or use a string directly 
    // in the Format event. 
    ListControl.FormatString = "{0}/{1}" ; 

    private void listBoxCategory_Format(object sender, ListControlConvertEventArgs e) 
     { 
      e.Value = string.Format(((ListBox)sender).FormatString, 
       ((ClassOfListItem)e.ListItem).LongName, 
       ((ClassOfListItem)e.ListItem).Key); 
    } 
+0

+1, kurz und auf den Punkt. –

0

Sie eine neue Eigenschaft Ihrer Klasse/Seite hinzufügen sollten, die den Wert von zwei Feldern in Ihrer Datenquelle und weisen Sie die Display dieser Eigenschaft

Verwandte Themen