Usuario
Mostrar todos los datos de una tabla en una BD en un DataGridView, según la opción elegida en un ComboBox

Pregunta
-
Buenas, espero todos se encuentren bien.
Por mas que busque y busque no encontré alguna solución a lo que requiero.Tengo una tabla en la base de datos con los campos (int)"IdServicio", (varchar)"NombreServicio"y (int)"PrecioServicio".
En el ComboBox cargo los datos con un DataSet. (código)
////////////////////////////////////////////
public System.Data.DataSet ServiceList()
{
System.Data.DataSet lista = new System.Data.DataSet();
SqlConnection connection = new SqlConnection(this.StringConnection);
SqlCommand command = new SqlCommand();
SqlDataAdapter adapter = new SqlDataAdapter();
command.CommandText = "Select * from [Vp_ServicesList]";
connection.Open();
command.Connection = connection;
command.CommandType = System.Data.CommandType.Text;
adapter.SelectCommand = command;
adapter.Fill(lista);
return lista;
}---------------------------------
private void LoadComboBox()
{
try
{
this.Servicios_ADO = new Cls_Servicios_ADO(ConfigurationManager.ConnectionStrings["StringConnection"].ConnectionString);
this.ctrServices1.CbxServicios.DataSource = Servicios_ADO.ServiceList().Tables[0];
this.ctrServices1.CbxServicios.DisplayMember = "Nombre";
this.ctrServices1.CbxServicios.ValueMember = "Monto del servicio";
}
catch (Exception error)
{
MessageBox.Show(error.Message, "Error al cargar los datos", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}////////////////////////////////////////////
Hasta aquí todo bien, pero soy consiente de que no estoy indicándole el "IdServicio" en ningún momento y ello es lo que no logro hacer.
Si agrego un servicio elegido en el comboBox el me muestra en el Dgv el nombre del servicio, el precio del servicio mas la operación del mismo por la cantidad.
Ejemplo de las columnas del Dgv.
Codigo - Servicio - Cantidad - Precio Unitario - Monto Total
Aquí quiero el Id - Parqueo - 2 - 1000 - 2000
Como podría mostrar el ID en el campo Código del Dgv..?
Espero haberme explicado bien y les agradezco desde ya la ayuda brindada.- Editado Kleiton CB viernes, 9 de agosto de 2019 3:38 Falto Ejemplo
Todas las respuestas
-
Hola Kleiton CB
Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comparto a continuación el siguiente enlace
Gracias por usar los foros de MSDN.
Pablo Rubio
____
Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.
Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
-
Hola Kleiton
Para acceder al campo IdServicio, de una determinada fila, teniendo la tabla
Servicios_ADO.ServiceList().Tables[0],
es así:
DataTable tabla = Servicios_ADO.ServiceList().Tables[0];
int Id = tabla.Rows[indiceFila].Field<int>(0);
Si fuera un string en la 3ra posición, sería
string str = tabla.Rows[indiceFila].Field<string>(2);
PODES llenar el DGV una por una las filas, o enlazando directamente el DataTable (tabla) a su DataSource, o enlazando cada campo uno por uno a cada columna
Saludos
Pablo
PD: Me parece que te estás complicando con el código, ... una de las cosas es que es muy raro que en el ValueMember vaya algo q no sea el campo ID
-
Hola Pablo, gracias por tu respuesta pero creo que entonces si formule la pregunta de forma incorrecta o no me supe explicar.
El Dgv se llenaría según la opción que elija en el ComboBox.
Pero logro ingresar los datos del nombre y precio, menos el del id, de la tabla que tengo en la Bd.
-
Hola Tigre Pablito,
PD: Me parece que te estás complicando con el código, ... una de las cosas es que es muy raro que en el ValueMember vaya algo q no sea el campo ID
En todas las búsquedas que he realizado he visto que en el ValueMember utilizan el id, en efecto, para luego a la hora de guardar en la BD se guarde el Id, que justamente es lo que quiero hacer, guardar luego solo el id del servicio en otra tabla.
Solo que de la misma manera no logro acceder a los datos del Precio de cada servicio.PODES llenar el DGV una por una las filas, o enlazando directamente el DataTable (tabla) a su DataSource, o enlazando cada campo uno por uno a cada columna
El Dgv se llenaría según la opción que elija en el ComboBox. -
Hola Kleiton
Pudiste solucionarlo? No había visto tu respuesta
Si no,
Veo que en la consulta de tu dataSet incluis todos los campos (select * from) ...
O sea, en tu dataSet, en Tables[0], están todos los campos, el Id, el nombre, y el precio
Que uses ese DataTable como DataSource del comboBox, no debería impedirte que lo uses también como DataSource del DGV
Te sugiero que pongas el Id como ValueMember
Si tenes que enlazar los campos del DataTable con una determinada columna, podes enlazar columna por columna, con la propiedad DataPropertyName = "nombreDeColumna";
Si seguís sin resolverlo, podes explicarme en que falla, y/o pasarme el código de como llenas el DGV (que aunque dependa de la opción del comboBox, no va a ser esencialmente muy diferente en cada caso)
Saludos
Pablo