Fecha de publicación: 24/09/2015
Hay veces que necesitamos añadir elementos manuales al Combobox aparte de los que capturamos de la tabla de una base de datos. En mi caso suelo utilizar un primer elemento que corresponde al valor por defecto y suele tener identificador 0.
Pues bien, con esta función podremos llenar el combobox con valores manuales y de una forma muy sencilla.
Lo primero de todos será crear una nueva Clase en nuestro proyecto.
Ahora añadiremos al apartado de los Usings estas bibliotecas:
using System.Data.SqlClient;
using System.Data;
El resto de clase será así:
public class CElementos
{
private int id;
private string valor;
private string valor2;
public CElementos(int vid,string vvalor,string vvalor2="")
{
id = vid;
valor = vvalor;
valor2 = vvalor2;
}
public int Id
{
set
{
id = value;
}
get
{
return id;
}
}
public string Valor
{
set
{
valor = value;
}
get
{
return valor;
}
}
public string Valor2
{
set
{
valor2 = value;
}
get
{
return valor2;
}
}
}
public static class ECombobox
{
public static void ComboCargar(SqlConnection bd, ComboBox obj,string criterio,string campoid,string campo,string valordefecto="(Ninguno)",string campo_opcional="")
{
DataTable dt = new DataTable();
SqlCommand comando = new SqlCommand(criterio, bd);
SqlDataAdapter adap = new SqlDataAdapter(comando);
adap.Fill(dt);
obj.DisplayMember = "Valor";
obj.ValueMember = "Id";
obj.Items.Clear();
if (valordefecto != ""){
CElementos x = new CElementos(0, valordefecto);
obj.Items.Add(x);
}
foreach (DataRow fila in dt.Rows)
{
if (campo_opcional != "")
{
obj.Items.Add(new CElementos((int)fila[campoid], (string)fila[campo], (string)fila[campo_opcional]));
}
else
{
obj.Items.Add(new CElementos((int)fila[campoid], (string)fila[campo]));
}
}
obj.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
obj.AutoCompleteSource = AutoCompleteSource.ListItems;
if (obj.Items.Count > 0)
{
obj.SelectedIndex = 0;
}
}
}
Ahora nos vamos a un formulario e introducimos un combobox, y sólo tenemos que poner este código para rellenarlo:
Celementos.ComboCargar(bd, comboBox1, "SELECT ID_Usuario, Usuario FROM Usuarios ORDER BY Usuario", "ID_Usuario", "Usuario", "(Administrador)");
Los parámetros que le pasamos a la función son:
Por último, para recuperar los valores del elementos seleccionado del Combobox sólo tendremos que hacer esto:
CElementos x = (CElementos)comboBox1.SelectedItem;