Frage

Ich bin zum arbeiten mit Java, wo große Mengen von Beispielen zur Verfügung stehen.Aus verschiedenen Gründen musste ich Wechsel zu C# und versuche, Folgendes zu tun in SharpDevelop:

// Form has a menu containing a combobox added via SharpDevelop's GUI

// --- Variables
languages = new string[2];
languages[0] = "English";
languages[1] = "German";
DataSet myDataSet = new DataSet();

// --- Preparation
DataTable lTable = new DataTable("Lang");
DataColumn lName = new DataColumn("Language", typeof(string));
lTable.Columns.Add( lName );
for( int i=0; i<languages.Length; i++ ) {
    DataRow lLang = lTable.NewRow();
    lLang["Language"] = languages[i];
    lTable.Rows.Add(lLang);
}
myDataSet.Tables.Add(lTable);

// --- Handling the combobox
mnuActionLanguage.ComboBox.DataSource = myDataSet.Tables["Lang"].DefaultView;
mnuActionLanguage.ComboBox.DisplayMember = "Language";

Man würde annehmen, um zu sehen, einige Werte in der dropdown-Liste auswählen, aber es ist leer.Bitte sagen Sie mir, was ich falsch mache ;(

EDIT:mnuActionLanguage.ComboBox.DataBind() ist das, was ich auch im Netz gefunden, aber es funktioniert nicht in meinem Fall.

LÖSUNG

mnuActionLanguage.ComboBox.BindingContext = this.BindingContext;

am Ende das problem gelöst!

War es hilfreich?

Lösung

Sie müssen die Bindung Kontext der ToolStripComboBox.ComboBox.

Hier ist eine leicht modifizierte version des Codes, die ich habe gerade neu mit Visual Studio.Der Menüpunkt Kombinationsfeld heißt toolStripComboBox1 in meinem Fall.Hinweis: die Letzte Zeile code um den verbindlichen Rahmen.

Ich bemerkte, dass, wenn die combo ist in der sichtbaren sind der tooltip in der Statusleiste, die Bindung funktioniert, ohne dies aber nicht, wenn es in einem drop-down-Menü.Tun Sie das gleiche problem?

Wenn Sie nicht bekommen kann diese arbeiten, schickt mir eine Mail über meine Kontakt-Seite und ich werde senden Sie das Projekt.Sie werden nicht in der Lage, es zu laden mit SharpDevelop wird aber mit C# Express.

var languages = new string[2];
languages[0] = "English";
languages[1] = "German";

DataSet myDataSet = new DataSet();

// --- Preparation
DataTable lTable = new DataTable("Lang");
DataColumn lName = new DataColumn("Language", typeof(string));
lTable.Columns.Add(lName);

for (int i = 0; i < languages.Length; i++)
{
    DataRow lLang = lTable.NewRow();
    lLang["Language"] = languages[i];
    lTable.Rows.Add(lLang);
}
myDataSet.Tables.Add(lTable);

toolStripComboBox1.ComboBox.DataSource = myDataSet.Tables["Lang"].DefaultView;
toolStripComboBox1.ComboBox.DisplayMember = "Language";

toolStripComboBox1.ComboBox.BindingContext = this.BindingContext;

Andere Tipps

string strConn = "Data Source=SEZSW08;Initial Catalog=Nidhi;Integrated Security=True";
SqlConnection Con = new SqlConnection(strConn);
Con.Open();
string strCmd = "select companyName from companyinfo where CompanyName='" + cmbCompName.SelectedValue + "';";
SqlDataAdapter da = new SqlDataAdapter(strCmd, Con);
DataSet ds = new DataSet();
Con.Close();
da.Fill(ds);
cmbCompName.DataSource = ds;
cmbCompName.DisplayMember = "CompanyName";
cmbCompName.ValueMember = "CompanyName";
//cmbCompName.DataBind();
cmbCompName.Enabled = true;

Zum Beispiel habe ich eine Tabelle:

DataTable dt = new DataTable ();
dt.Columns.Add("Title", typeof(string));
dt.Columns.Add("Value", typeof(int));

In Datensatz Tabelle:

DataRow row = dt.NewRow();
row["Title"] = "Price"
row["Value"] = 2000;
dt.Rows.Add(row);

oder:

dt.Rows.Add("Price",2000);

schließlich:

combo.DataSource = dt;
combo.DisplayMember = "Title";
combo.ValueMember = "Value";

Beantragen Sie einen RowFilter auf Ihre Default später im Code? Dies könnte die Ergebnisse ändern zurückgegeben.

Ich möchte vermeiden, auch die Zeichenfolge als Anzeigeelement verwendet, wenn Sie die Spalte die Daten einen direkten Bezug haben würde ich die Objekteigenschaften verwenden:

mnuActionLanguage.ComboBox.DataSource = lTable.DefaultView;
mnuActionLanguage.ComboBox.DisplayMember = lName.ColumnName;

Ich habe versucht, dies mit einem leeren Formular und Standard-Combo, und scheint für mich zu arbeiten.

Ein paar Punkte:

1) "DataBind ()" ist nur für Web-Anwendungen (nicht Windows-Anwendungen).

2) Der Code sieht sehr 'JAVAish' (keine schlechte Sache, nur eine Beobachtung).

Versuchen Sie folgendes:

mnuActionLanguage.ComboBox.DataSource = languages;

Wenn das nicht funktioniert ... dann gehe ich davon aus, dass Ihre Datenquelle auf irgendwo im Code abgestuft wird.

Diese Zeile

mnuActionLanguage.ComboBox.DisplayMember = "Lang.Language";

ist falsch. Ändern Sie ihn auf

mnuActionLanguage.ComboBox.DisplayMember = "Language";

und es wird funktionieren (auch ohne DataBind ()).

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