C sharp - Asignar Valor a Combobox -Programacion por capas

   
Vista:
Imágen de perfil de Jose Fdo

Asignar Valor a Combobox -Programacion por capas

Publicado por Jose Fdo (10 intervenciones) el 08/03/2016 14:51:01
Saludos, actualmente estoy trabajando con capas un proyecto en C# y deseo llenar un ComboBox desde mi base de datos, por ahora ya logré llenar el combo con el nombre que será lo que verá el usuario, mi problema es cuando deseo operar con ese campo.
Mi tabla está compuesta por 2 campos[Nombre] y [Codigo], actualmente tengo lo siguiente en cada capa.

CAPA DATOS
1
2
3
4
5
6
7
8
9
10
11
12
13
//Metodo para llenar Combobox
public DataTable LlenarCombo(String Sql, string Tabla, string Campo)
{
	ConexBD.Open();
	Sql = " SELECT "+ Campo + " FROM " + Tabla;
	comando = new SqlCommand(Sql, ConexBD);
 
	DataTable Datos = new DataTable();
	Datos.Load(comando.ExecuteReader());
	ConexBD.Close();
 
	return Datos;
}

CAPA NEGOCIO
1
2
3
4
5
6
7
8
9
10
11
//Metodo para llenar los ComboBox
public DataTable ObtenerDatos()
{
	string Consulta = "SELECT Pe_Codigo,Pe_Nombre FROM Perfil";
	String Tabla = "Perfil";
	string Campo = "Pe_Codigo, Pe_Nombre";
	//string condicion = "";
	DataTable DatosConsultados = Usuario.LlenarCombo(Consulta,Tabla,Campo);
 
	return DatosConsultados;
}

CAPA PRESENTANCIÓN
1
2
3
4
5
6
7
8
9
public void LlenarComboBox()
{
	DataTable datos = Insertar.ObtenerDatos();
	foreach (DataRow registro in datos.Rows)
	{
		cmbPerfil.Items.Add(registro["Pe_Nombre"].ToString());
		cmbPerfil.SelectedIndex = Convert.ToInt32(registro["Pe_Codigo"].ToString());
	}
}


Solo me muestra el nombre pero los valores siempre me asigna solo el ultimo.
Agradezco la ayuda y perdonen el codigo estoy empezando jejeje
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Javier

Asignar Valor a Combobox -Programacion por capas

Publicado por Javier (8 intervenciones) el 08/03/2016 23:30:39
segun yo estas manejando mal el codigo, ya que en tu capa negocios hacer la consulta completa y en la de datos haces una concatenacion, pasale a string sql de tu capa datos la consulta tal como esta en tu capa negocios, es decir, quita la concatenacion que tienes en capa datos o bien quita string sql como parametro, ahora lo que puedes hacer crear as columnas del datatable y llenarlas con tu consulta con Columns.Add y retornar el datatable, espero te sirva de algo.

Ahora al cargar tu combo creo seria el:

1
2
3
tu combo.ValueMember = "Pe_Nombre";
                    tu combo.DisplayMember = "Pe_Codigo";
                    tu combo.DataSource =tu datatable;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Asignar Valor a Combobox -Programacion por capas

Publicado por Alejandro (8 intervenciones) el 09/03/2016 14:53:50
Mirando un poco tu código, veo que la variable string Sql que utilizas en el método LlenarCombo es innecesaria, pues puedes declarar a Sql como variable de contexto del método ya que la tabla y campos se la pasas como parámetros, en fin, este quedaría como un método que te resolvería este tema para cualquier consulta con este formato a no ser que decidas hacer clausulas where, esto es como sugerencia para que refines tu código.

Ahora mira esto, para llenar el ComboBox te propongo que hagas esto, se trata de crear los items del combo y les asigne los valores, te pongo un ejemplo hecho en WPF, esto te garantiza tener un codificador y un id para cada elemento del ComboBox, espero te sirva, saludos.

1
2
3
4
5
6
7
8
for (int i = 0; i <= dt.Rows.Count - 1; i++)
{
       ComboBoxItem item = new ComboBoxItem();
       item.Name = dt.Rows[i]["id"].ToString());
       item.Content = dt.Rows[i]["codificador"].ToString();
 
       comboBox.Items.Add(item);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Asignar Valor a Combobox -Programacion por capas

Publicado por Francisco Daniel (7 intervenciones) el 31/05/2016 01:46:20
Carga tu combo de la siguiente manera

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void LlenarComboBox()
{
	DataTable datos = Insertar.ObtenerDatos();
        this.cmbPerfil.DataSourse = datos;
        this.cmbPerfil.DisplayMember = "Pe_Nombre";
        this.cmbPerfil.ValueMember = "Pe_Codigo";
	foreach (ListItem item in this.cmbPerfil.Items)
                {
                    if (item.Value == _Nombre)
                    {
                        item.Selected = true;
                        break;
                    }
                }
                his.cmbPerfil.Items.FindByText(_Nombre).Selected = true;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar