c# - valuemember - ¿Cómo establecer el valor seleccionado de Combobox?
select item combobox c# (11)
Yo uso combobox en formato c # windows. Ligé la lista de elementos de la siguiente manera:
var employmentStatus = new BindingList<KeyValuePair<string, string>>();
employmentStatus.Add(new KeyValuePair<string, string>("0", "[Select Status]"));
employmentStatus.Add(new KeyValuePair<string, string>("1", "Contract"));
employmentStatus.Add(new KeyValuePair<string, string>("2", "Part Time"));
employmentStatus.Add(new KeyValuePair<string, string>("3", "Permanent"));
employmentStatus.Add(new KeyValuePair<string, string>("4", "Probation"));
employmentStatus.Add(new KeyValuePair<string, string>("5", "Other"));
cmbEmployeeStatus.DataSource = employmentStatus;
cmbEmployeeStatus.ValueMember = "Key";
cmbEmployeeStatus.DisplayMember = "Value";
cmbEmployeeStatus.SelectedIndex = 0;
Guardo el valor seleccionado en la base de datos eg.1 o 2. Ahora quiero establecer el valor seleccionado de un elemento de la base de datos como:
cmbEmployeeStatus.SelectedValue =employee.employmentstatus;
Pero el combobox no está seleccionado con valor. ¿Cómo puedo hacer eso?
A continuación funcionará en su caso.
cmbEmployeeStatus.SelectedItem =employee.employmentstatus;
Cuando establece la propiedad SelectedItem en un objeto, ComboBox intenta convertir ese objeto en el seleccionado actualmente en la lista. Si el objeto se encuentra en la lista, se muestra en la porción de edición de ComboBox y la propiedad SelectedIndex se establece en el índice correspondiente. Si el objeto no existe en la lista, la propiedad SelectedIndex se deja en su valor actual.
EDITAR
Creo que establecer el elemento seleccionado como a continuación es incorrecto en su caso.
cmbEmployeeStatus.SelectedItem =**employee.employmentstatus**;
Como abajo
var toBeSet = new KeyValuePair<string, string>("1", "Contract");
cmbEmployeeStatus.SelectedItem = toBeSet;
Deberías asignar el par de nombre de nombre correcto.
En Windows Appliation usamos así
DDLChangeImpact.SelectedIndex = DDLChangeImpact.FindStringExact(ds.Tables[0].Rows[0]["tmchgimp"].ToString());
DDLRequestType.SelectedIndex = DDLRequestType.FindStringExact(ds.Tables[0].Rows[0]["rmtype"].ToString());
Para establecer el valor en el ComboBox
cmbEmployeeStatus.Text="Something";
Para hacer el estilo de base de datos ComboBoxes tratando de configurar manualmente una relación entre un número (interno) y algo de texto (visible), he encontrado que tienes que:
- Almacene sus artículos en una lista (Está cerca - excepto la cadena, cadena - necesita int, cadena)
- Propiedad de DataSource a la lista (Eres bueno)
- DataMember, DataValue (Eres bueno)
- Cargue el valor predeterminado (Usted es bueno)
- Poner valor en la base de datos (Su pregunta)
- Obtenga valor para volver a poner en la base de datos (su próxima pregunta)
Lo primero es lo primero. Cambie su KeyValuePair para que se vea así:
(0, "Seleccionar") (1, "Opción 1")
Ahora, cuando ejecuta su sql "Seleccione empstatus from employees where blah" y recupera un entero, debe configurar el combobox sin perder un montón de tiempo.
Simplemente: * ** SelectedVALUE - not Item * ** *
cmbEmployeeStatus.SelectedValue = 3; //or
cmbEmployeeStatus.SelectedValue = intResultFromQuery;
Esto funcionará tanto si ha cargado manualmente el cuadro combinado con valores de código, como si lo hizo, o si carga el comboBox de una consulta.
Si sus claves externas son enteros, (que por lo que hago, todos lo son), la vida es fácil. Después de que el usuario realiza el cambio en el comboBox, el valor que almacenará en la base de datos es SelectedValue. (Transmitido a int según sea necesario)
Aquí está mi código para configurar el ComboBox al valor de la base de datos:
if (t is DBInt) //Typical for ComboBox stuff
{
cb.SelectedValue = ((DBInt)t).value;
}
Y para recuperar:
((DBInt)t).value = (int) cb.SelectedValue;
DBInt es un contenedor para un Entero, pero esto es parte de mi ORM que me da control manual sobre el enlace de datos y reduce los errores de código.
¿Por qué respondí esto tan tarde? También estaba luchando con esto, ya que parece que no hay buena información en la web sobre cómo hacer esto. Lo descubrí y pensé que sería agradable y lo publicaría para que alguien más lo viera.
Prueba este.
cmbEmployeeStatus.SelectedIndex = cmbEmployeeStatus.FindString(employee.employmentstatus);
Espero que ayude. :)
Prueba esto:
KeyValuePair<string, string> pair = (KeyValuePair<string,string>)this.ComboBox.SelectedItem;
Sospecho que algo no está bien cuando estás guardando en el db. ¿Entiendo tus pasos como:
- poblar y enlazar
- el usuario selecciona y el elemento, toca y guarda ... luego guardas en el archivo db
- ahora si selecciona otro elemento, ¿no seleccionará?
¿Tiene más código, especialmente al guardar? donde en su código se están inicializando y completando la lista de enlaces
Una posible solución:
cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;
Use la propiedad SelectedIndex para el estado del empleado respectivo en el cuadro combinado.
prueba esto
combobox.SelectedIndex = BindingSource.Item(9) where "9 = colum name 9 from table"
cmbEmployeeStatus.Text = "text"