ejemplos - combobox selecteditem c#
Cómo establecer combobox por defecto (5)
Así que he estado buscando establecer un valor predeterminado para mi combobox. Encontré algunas cosas pero ninguna de ellas parece funcionar.
En realidad, funciona si creo un simple cuadro combinado y uso comboBox1.SelectedIndex = comboBox1.Items.IndexOf("something")
pero una vez que genere dinámicamente los contenidos de los cuadros combinados, no puedo hacer que funcione.
Así es como lleno mi cuadro combinado (ubicado en el constructor de la clase);
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]));
}
Parece que no logro que funcione para establecer un valor predeterminado, como si cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New")
debajo del código anterior, no funcionará.
WinForms, por cierto.
Gracias de antemano.
Aquí está mi solución simple
var list = comboBox1.Items.Cast<string>().ToList();
cbxCategory.SelectedIndex = list.FindIndex(c => c.StartsWith("test"));
Mi solución:
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;
Parece que estás buscando en la colección cbxCategory.Items una cadena, pero contiene elementos de tipo ComboBoxItem. Por lo tanto la búsqueda devolverá -1.
Puedes usar 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);
Clase ComboBoxItem
:
class ComboBoxItem
{
public string ResultFirst { get; set; }
public string ResultSecond { get; set; }
public ComboBoxItem(string first, string second)
{
ResultFirst = first;
ResultSecond = second;
}
}
cbxCategory.SelectedIndex
debe establecerse en un entero de 0
a Items.Count-1
like
cbxCategory.SelectedIndex = 2;
tu
cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New")
debe devolver -1 siempre que ComboboxItem no corte la cadena ("Nuevo");
Otra solución aunque no me gusta mucho sería
foreach(object obj in cbxCategory.Items){
String[2] objArray = (String[])obj ;
if(objArray[1] == "New"){
cbxCategory.SelectedItem = obj;
break;
}
}
Quizás esto también requiera la siguiente transformación a tu código.
foreach (string[] result in list)
{
cbxCategory.Items.Add(result);
}
No he probado el código y no estoy seguro de la conversión a String [2] pero algo similar debería funcionar