2009-08-31 24 views
5

Hola, quiero vincular algunos valores a la casilla de verificación de forma dinámica.combobox valor predeterminado winforms C#

dataset ds = //getting emp values form database; 
cbemp.ValueMember = "empid"; 
cbemp.DisplayMember = "empname"; 
cbemp.DataSource = ds.Tables["emp"]; 

funciona bien. Pero quiero agregar

"Seleccionar emplyoee" como valor predeterminado de la casilla de verificación.

Pero caja de mi cheque añadiendo directamente los valores como

a1
a2 a3

como este.

Me trataron como esto

cbemp.Items.Insert(0, "Select emplyoee"); 

pero no está funcionando

cómo puedo añadirlo?

Respuesta

8

Cuando utiliza enlace de datos, no puede agregar o eliminar elementos "manualmente". La única forma de lograr lo que desea utilizando el enlace de datos es insertar una fila primero en el DataTable con el valor deseado, o rellenar el cuadro combinado por código (agregue el elemento "Seleccionar empleado" y luego itere las filas DataTable para agregar el archivos).

Tal vez algo como esto podría funcionar:

// create new row for "Select employee" 
DataRow row = ds.Tables["emp"].NewRow(); 
row["empid"] = -1; 
row["empname"] = "Select employee"; 
// insert the row at the top of the table 
ds.Tables["emp"].Rows.InsertAt(row, 0); 
// do the databinding 
cbemp.ValueMember = "empid"; 
cbemp.DisplayMember = "empname"; 
cbemp.DataSource = ds.Tables["emp"]; 

yo no uso mucho enlace de datos, lo que puede haber inconvenientes con esto que no tengo conocimiento de (pero estoy seguro de que la comunidad va a señalarlo en ese caso).

+0

gracias resuelto – Nagu

0

Creo que tendrías que agregarlo a la tabla de datos subyacente (ds.Tables ["emp"]) para que aparezca como una entrada en la lista cuando estés usando controles de datos.

0

Cuando su control está vinculado a datos no puede agregar elementos manualmente, creo.

Para solucionar este problema, puede agregar un nuevo elemento a su fuente de datos o puede agregar los elementos manualmente.

4

Insertar datos en su fuente de datos es una mala idea. Promueve romper las abstracciones de sus capas y puede ocasionar algunos problemas si usa la misma fuente de datos en otro lugar.

En su lugar, puede extender fácilmente el ComboBox para mostrar un mensaje "Seleccione" cuando no tenga ningún elemento seleccionado.

que escribió sobre este tema y proporcionan el código aquí: http://www.byteauthor.com/2010/08/inner-label-in-combobox/

0

La solución aceptada anterior es mejor, pero un truco que puede ser útil a veces es Unión un registro "falso" al SQL que regresa el conjunto de registros para el enlace de datos. En este caso, algo así como:

select 0 as empid, 'Please select' as empname 
union 
select empid, empname from emp 
order by empid 

Por supuesto que tendrá que proteger la base de datos de escribir accidentalmente el registro "0" de nuevo (por ejemplo, si el usuario no realiza una selección), pero eso no es demasiado duro.

0

si ComboBoxStyle está configurado para DropDownList (para que el usuario no pueda editar combobox) entonces la forma más fácil de asegurarse de que el usuario seleccione un elemento es establecer selectedIndex = -1, siempre puede agregar "Seleccionar" etc. ARRIBA el cuadro combinado.

0

En mi caso (combobox con datos) resolví el problema de esta manera. Por supuesto, la mejor manera es la de Kevin Coulombe.

ComboBox.SelectedIndex = -1; 
ComboBox.Text = "Please, select something"; 

Con un poco de código, puede administrar este escenario bastante fácil.

Cuestiones relacionadas