Question

Je suis habitué à travailler avec Java où de nombreux exemples sont disponibles. Pour diverses raisons, j'ai dû passer à C # et essayer de faire ce qui suit dans 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";

On pourrait supposer que certaines valeurs apparaissent dans la liste déroulante, mais elles sont vides. S'il vous plaît dites-moi ce que je fais mal; (

EDIT: mnuActionLanguage.ComboBox.DataBind () est ce que j'ai aussi trouvé sur le net, mais cela ne fonctionne pas dans mon cas.

SOLUTION

mnuActionLanguage.ComboBox.BindingContext = this.BindingContext;

à la fin résolu le problème!

Était-ce utile?

La solution

Vous devez définir le contexte de liaison de ToolStripComboBox.ComboBox.

Voici une version légèrement modifiée du code que je viens de recréer à l'aide de Visual Studio. La liste déroulante des éléments de menu s'appelle toolStripComboBox1 dans mon cas. Notez la dernière ligne de code pour définir le contexte de liaison.

J'ai remarqué que si le combo est dans le visible sont dans la bande à outils, la reliure fonctionne sans cela, mais pas quand elle est dans une liste déroulante. Avez-vous le même problème?

Si cela ne fonctionne pas, envoyez-moi un message via ma page de contact et je vous enverrai le projet. Vous ne pourrez pas le charger avec SharpDevelop, mais avec 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;

Autres conseils

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;

Par exemple, j'ai créé un tableau:

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

Ajouter un enregistrement à la table:

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

ou:

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

enfin:

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

Appliquez-vous un RowFilter à votre DefaultView plus tard dans le code? Cela pourrait modifier les résultats renvoyés.

J'éviterais également d'utiliser la chaîne en tant que membre d'affichage si vous avez une référence directe à la colonne de données. J'utiliserais les propriétés de l'objet:

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

J'ai essayé cela avec un formulaire vierge et une liste déroulante standard et semble fonctionner pour moi.

Quelques points:

1) " DataBind () " concerne uniquement les applications Web (et non les applications Windows).

2) Votre code a l'air très 'JAVAish' (pas une mauvaise chose, juste une observation).

Essayez ceci:

mnuActionLanguage.ComboBox.DataSource = languages;

Si cela ne fonctionne pas ... alors je suppose que votre source de données est utilisée ailleurs dans le code.

Cette ligne

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

a tort. Changez-le en

mnuActionLanguage.ComboBox.DisplayMember = "Language";

et cela fonctionnera (même sans DataBind ()).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top