2011-06-10 16 views
8

Tengo dos comboBox cb_Brand y cb_Model en un winForm.ComboBox tiene su valor anterior después de Borrar()

cb_Model llena los valores de la marca Select. el problema es: si seleccionamos la marca y seleccionamos el modelo bajo esa marca, cb_Model no pierde el valor del modelo anterior seleccionado. por ejemplo: si seleccionamos la marca Audi y el modelo A3 y seleccionamos la marca Ford, cuando hago clic en cb_Model para seleccionar el modelo, muestra el A3 como modelo seleccionado, pero otros modelos en la lista pertenecen a ford.

mi código es:

private void cb_Brand_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Clear Current Data 
    cb_Model.Text = ""; 
    cb_Model.Items.Clear(); 

    CarModel _carmodel = new CarModel(); 

    // Get Selected Car Brnad 
    int CarBrandID = _carmodel .GetCarBrandID(cb_Brand.Text); 

    //Enable choice of Model 
    SortedList<int, Model> colM; 

    colM = Model.ReadModel(CarBrandID); 

    cb_Model.DisplayMember = "ModelText"; 
    foreach (Model objM in colM.Values) 
    { 
     cb_Model.Items.Add(objM); 
    } 
} 

Cualquier idea .. Por favor Gracias


incapaz de encontrar la razón pero resuelto con una solución temporal:

private void cb_Model_Click(object sender, EventArgs e) 
{ 
    cb_Model.Text = ""; 
} 

Gracias muchachos aplausos

Respuesta

7

En lugar de añadir los elementos de forma manual como esto:

foreach (Model objM in colM.Values) 
{ 
    cb_Model.Items.Add(objM); 
} 

Vamos .NET cuidar de él para usted y sustituirla por la siguiente:

cb_Model.DataSource = colMValues; 

que se unirá a los datos de la lista y actualiza automáticamente los elementos de las cajas combinadas cuando se establece una fuente de datos.

También no necesitará estas líneas más:

// Clear Current Data 
cb_Model.Text = ""; 
cb_Model.Items.Clear(); 

tener una lectura de este para obtener más información sobre las listas de unión (y otras fuentes de datos) a ComboBoxes:

How to: Bind a Windows Forms ComboBox or ListBox Control to Data (MSDN)

+0

solución inteligente, pero no hace ninguna diferencia para mí. En realidad, solo se completa cuando hago clic en 'cb_Model' para seleccionar el modelo. Parece que mantener ese valor en algún lugar de la memoria. – Scorpion

0

I He probado tu ejemplo. Para mí funcionó como debería haberlo hecho. Puede intentar configurar el cb_model.SelectedText como "" o SelectedItem para anular

+0

no hace ninguna diferencia, también estoy sorprendido, tengo controles similares en el formulario de búsqueda y están funcionando bien ... solo ocurre en el formulario de edición. – Scorpion

+0

¿se aseguró de que Model.ReadModel (CarBrandID) devuelva solo los modelos ford? – maephisto

6

@ w69rdy sugiere una solución excelente.

La razón por la que el modelo cb_no ha cambiado es value es porque nunca ha cambiado el valor. cb_Model.Items.Clear() no cambia el índice seleccionado; solo los elementos se eliminan del cuadro combinado.

Usando el ejemplo de código proporcionado en su pregunta:

// Clear Current Data 
cb_Model.Text = ""; 
cb_Model.Items.Clear(); 
cb_Model.SelectedIndex = -1; // would effectively clear the previously selected value. 
+0

Ya probé 'cb_Model.SelectedIndex = -1;', pero no hay diferencia. – Scorpion

+1

@Scorpion: otra opción, creo, es establecer 'SelectedItem = null' – IAbstract

+0

@Scorpion: hay algo más que impide que el valor se borre. Cualquiera de las sugerencias aquí funcionaría ... como dice maephisto, le funciona, así que sugeriría que hay algo que te falta;) – IAbstract

3

que tenía el mismo problema ahora y el método ResetText de Combobox resuelto el problema para mí

0

he encontrado que manteniendo el alcance de la fuente de datos cerca de la la carga del cuadro combinado funcionó para mí. Tenía una tabla de datos con ámbito de nivel de clase y no se borró, pero luego la puse en el ámbito de nivel de función y la tuve clara después de la carga y funcionó.

0

Tengo un problema similar, intentaron cmb.resettext se borra el texto, pero no valor.En mi forma de carga que tengo el código de abajo: Dim cmd As New SqlCommand("SELECT stud_id,name FROM student_details WHERE stud_id NOT IN (SELECT stud_id FROM student_details WHERE hostel_id!=0)", sqlcont.Conn) Dim dr As SqlDataReader = cmd.ExecuteReader Dim dat As New DataTable Dim j As Integer For j = 0 To dat.Rows.Count - 1 dr.Read() Next dat.Load(dr) cmbstud.DisplayMember = "name" cmbstud.ValueMember = "stud_id" cmbstud.DataSource = New BindingSource(dat, Nothing) dr.Close() En mi caso btnhostel haga clic en Tengo el código de abajo: frmallocateHostel_Load (Nada, Nada) Esto puse en intento de volver a cargar mi conjunto de datos y, por lo tanto, mis cuadros combinados. Al usar cmbstud.resettext simplemente borra el texto, no el valor.

0

Tengo mismo problema entonces utilizado

combobox1.SelectedIndex=-1 

y funciona.

Cuestiones relacionadas