J'ai donc cherché à définir une valeur par défaut pour ma combobox. J'ai trouvé quelques choses mais aucune ne semble fonctionner.
En fait, cela fonctionne si je crée une combobox simple et utilise comboBox1.SelectedIndex = comboBox1.Items.IndexOf("something")
mais une fois que j'ai généré dynamiquement le contenu des comboboxs, je ne peux plus le faire fonctionner.
C'est ainsi que je remplis ma zone de liste déroulante (située dans le constructeur de la classe);
string command = "SELECT category_id, name FROM CATEGORY ORDER BY name";
List<string[]> list = database.Select(command, false);
cbxCategory.Items.Clear();
foreach (string[] result in list)
{
cbxCategory.Items.Add(new ComboBoxItem(result[1], result[0]));
}
Je n'arrive pas à le faire fonctionner pour définir une valeur par défaut, comme si je place cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New")
sous le code ci-dessus, cela ne fonctionnera pas.
WinForms, au fait.
Merci d'avance.
cbxCategory.SelectedIndex
doit être défini sur un entier de 0
à Items.Count-1
comme
cbxCategory.SelectedIndex = 2;
votre
cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New")
doit renvoyer -1 tant qu'aucun ComboboxItem n'efface la chaîne ("Nouveau");
une autre solution si je ne l'aime pas beaucoup serait
foreach(object obj in cbxCategory.Items){
String[2] objArray = (String[])obj ;
if(objArray[1] == "New"){
cbxCategory.SelectedItem = obj;
break;
}
}
peut-être que cela nécessite également la transformation suivante de votre code
foreach (string[] result in list)
{
cbxCategory.Items.Add(result);
}
Je n'ai pas testé le code et je ne suis pas sûr de la conversion en String [2] mais quelque chose de similaire devrait fonctionner
Vous pouvez utiliser LINQ.
//string command = "SELECT category_id, name FROM CATEGORY ORDER BY name";
//List<string[]> list = database.Select(command, false);
// sample data...
List<string[]> list = new List<string[]> { new string[] { "aaa", "bbb" }, new string[] { "ccc", "ddd" } };
cbxCategory.Items.Clear();
foreach (string[] result in list)
{
cbxCategory.Items.Add(new ComboBoxItem(result[1], result[0]));
}
ComboBoxItem tmp = cbxCategory.Items.OfType<ComboBoxItem>().Where(x => x.ResultFirst == "bbb").FirstOrDefault();
if (tmp != null)
cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf(tmp);
ComboBoxItem
classe:
class ComboBoxItem
{
public string ResultFirst { get; set; }
public string ResultSecond { get; set; }
public ComboBoxItem(string first, string second)
{
ResultFirst = first;
ResultSecond = second;
}
}
Il semble que vous recherchiez une chaîne dans la collection cbxCategory.Items, mais il contient des éléments de type ComboBoxItem. Par conséquent, la recherche renverra -1.
Voici ma solution simple
var list = comboBox1.Items.Cast<string>().ToList();
cbxCategory.SelectedIndex = list.FindIndex(c => c.StartsWith("test"));
Ma solution:
int? defaultID = null;
foreach (DataRow dr in dataSource.Tables["DataTableName"].Rows)
{
if ((dr["Name"] != DBNull.Value) && ((string)dr["Name"] == "Default Name"))
{
defaultID = (int)dr["ID"];
}
}
if (defaultID != null) comboBox.SelectedValue = defaultID;