varias unir tablas mostrar form example ejemplos datos agregar c# sql sql-server datagridview sqlcommand

c# - unir - Agrupar por emisión cuando SELECCIONE a dataGridView desde 2 tablas



mostrar dos tablas en un datagridview c# (1)

Con poca ayuda de ustedes hice esta dos QUERY . Publiqué fotos para que veas que en green squares hay valores vacíos que me gustaría ver y en red squares hay valores que no me gustaría mostrar. La variable vyberradek inserta valores para ''subclave'', es INT en DB pero la paso por string .

Así que simplificaré: ahora puedo mostrar todo o un poco, ¿me ayudarías a mostrar los registros correctos?

Esta primera query hace esto:

string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= ''{0}'' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);

Aquí está lo que hace la segunda query :

string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= ''{0}'' and klisluz.subkey =''" + vyberradek + "'' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);

Entonces, como pueden ver, también me gustaría mostrar los vacíos. Creo que es posible que también necesites el código que marca las casillas de verificación, aquí está:

for (int i = 0; i < dtg_ksluzby.Rows.Count; i++) { var row = dtg_ksluzby.Rows[i]; int id = (int)row.Cells["ID"].Value; using (var novyprikaz3 = new SqlCommand("SELECT * from klisluz WHERE subkey=''" + vyberradek + "''AND IDzajsluz=" + id, spojeni)) { spojeni.Open(); SqlDataReader precti3 = novyprikaz3.ExecuteReader(); if (precti3.HasRows) { row.Cells[5].Value = true; } spojeni.Close(); } }

¿Podrían sugerirme cómo debería ser la query para seleccionar incluso el valor no verificado (que no están en la tabla klisluz) y los marcados?

Como veo que nadie responde tan bien, permítanme darles un ejemplo simple: cuando creo el cliente, verifico, por ejemplo, 3 de 10 casillas de verificación. Por lo tanto, selecciona 3 filas (y las agrega a la tabla klisluz). Y tengo estas dos queries : La First query muestra la casilla marcada de otros clientes, pero también las que no están marcadas para este cliente. Simplemente muestra todo lo que hay en la base de datos, por lo que muestra las filas con elementos comprobados de otros clientes (pero solo aquellos que son iguales para este y otros clientes, NO CREA duplicados). El segundo muestra solo revisado para este cliente pero sin los que no ha elegido. Entonces, cuando edito este cliente, me gustaría mostrar qué revisó y el resto 7 (las 7 posibilidades que no ha revisado para poder verificarlas). Ahora puedo mostrar solo lo que compré (sin marcar) o todo lo que incluye otras comprobaciones de clientes (que son las mismas para este cliente). Espero que sea comprensible, lo siento por mi inglés débil.

PD Con cheque me refiero a marcar la checkbox (seleccionar la fila) Básicamente es un programa que agrega servicio a los clientes.

Muchas gracias por su interés y también por leer si lo leyó todo. Estoy atascado con este problema durante 2 días: /

Imagen para kwwallpe: Aquí puede ver que "Nic" nunca ha sido seleccionado por ningún cliente, por lo que se muestra.

Para que mi pregunta sea más clara, tomo algunas de estas columnas de otra tabla (como se puede ver en la consulta sql).

Esto es lo que hace el código de kwwallpe:

string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= ''{0}'' and ISNULL(klisluz.subkey, ''" + vyberradek + "'') = ''" + vyberradek + "'' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);

Este código está muy cerca, creo que esos 2. Porque SELECCIONA valores que nunca han sido seleccionados por ningún cliente b4. Puede ver que se muestra el sombrero "Nic" porque no está en la tabla klisluz.


Si entiendo lo que está buscando, esta es la parte que le impide obtener las filas sin entradas en klisluz:

WHERE zajsluz.akce= ''{0}'' and klisluz.subkey =''" + vyberradek + "''

Para las filas que no existen en klisluz, la subclave será NULL, que no coincidirá con ninguna cláusula WHERE. Para obtener estas filas también, puede reemplazar su cláusula WHERE actual con:

WHERE zajsluz.akce= ''{0}'' and ISNULL(klisluz.subkey, ''" + vyberradek + "'') =''" + vyberradek + "''

Aquí está la línea completa de código:

string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= ''{0}'' and ISNULL(klisluz.subkey, ''" + vyberradek + "'') = ''" + vyberradek + "'' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);

Para determinar si se debe marcar la casilla de verificación:

if (precti3.HasRows) { precti3.Read(); if (precti3.Item("subkey") != Null) { row.Cells[5].Value = true; } else { row.Cells[5].Value = false; } }

Creo que así es como iría en C #. Trabajo en VB.NET, usé un convertidor en línea para esto.