none
DatagridView Con Inner Join RRS feed

  • Pregunta

  • Hola, tengo dos tablas:
    Clientes: IdCliente, NombreCliente
    Turnos: IdTurno, IdNombre

    Hago la siguiente consulta

    Select * From Turnos Inner Join Clientes On Turnos.IdNombre = Clientes.IdCliente

    la consulta funciona perfecto, la pregunta es la siguiente: como obtengo del Dgv el IdNombre? (valor numerico no el que me genero el inner join) cuando obtengo los datos de la tabla turnos en otro formulario para editarlos tengo que hacer una consulta nuevamente a la tabla Clientes para saber el Id o queda algun registro en el Dgv? el Dtg tiene alguna funcion como el combobox que muestra el ValueMember y el DisplayMember? espero haber sido claro. Desde ya muchisimas gracias.

    lunes, 22 de febrero de 2021 23:20

Todas las respuestas

  • Hola:

    La verdad es que no me he "enterado" de nada.
    ¿Porque no haces la siguiente consulta y ahi ya tienes todos los campos?

    Select Turnos.IdTurno, Turnos.IdNombre, Clientes.IdCliente,Clientes.NombreCliente From Turnos Inner Join Clientes On Turnos.IdNombre = Clientes.IdCliente


    P.D.
    Podias haber puesto el campo Turnos.IdNombre como Turnos.IdCliente para que sea un poco mas claro

    Un saludo desde Bilbo
    Carlos
    martes, 23 de febrero de 2021 12:17
  • el Dtg tiene alguna funcion como el combobox que muestra el ValueMember y el DisplayMember?

    No. Es distinto. En el ComboBox solo se muestra un único dato, y por eso tiene la propiedad DisplayMember para poder elegir cuál es el que hay que mostrar. Y luego, cuando seleccionas uno de los datos, puedes querer conocer la clave del que has seleccionado, y por eso tiene el ValueMember, para poder decir qué columna se usa aquí (que no es visible en pantalla).

    Pero el Dtg no tiene la limitación de solo mostrar una columna, sino que muestra muchas. Entonces no tiene sentido el DisplayMember. En su lugar, tiene la colección Columns. La puedes editar desde el diseñador pinchando sobre ella en la ventana de propiedades. De forma predeterminada la propiedad AutoGenerateColumns es true y eso hace que el Grid muestre todas las columnas que le aportes en su DataSource. Pero si lo pones en false, puedes acudir a la colección columns y establecer ahí las que quieras mostrar. No está limitado a que sea una sola, como ocurre con el ComboBox.

    Y el ValueMember no se puede usar. El combo guarda este campo "oculto", pero el Dtg no asocia ningún dato oculto en las filas. La alternativa sería añadir ese dato en una columna, y luego marcar la columna como "hidden" desde la colección Columns. Esto te permite recuperarlo por código sin que se vea en pantalla.

    martes, 23 de febrero de 2021 15:46