none
Problema con datagridview en C# RRS feed

  • Pregunta

  • Buenos dias tengo el siguiente problema

    tengo un datagrid en mi form que relleno desde una consulta sql sin problemas 

    pero cuando modifico la consulta por otra en la cual poseo clausulas sumarias (sum,avg,count) y group by mi data grid no muestra nada

    la consulta anda perfectamente en sql osea que el codigo esta bien por eso esa es mi duda

    porque no la muestra el datagrid si con las demas consultas no tengo problemas es solo con esta que posee clausulas sumarias


    • Cambiado webJoseModerator martes, 13 de noviembre de 2012 15:02 (De:Lenguaje C#)
    martes, 13 de noviembre de 2012 14:46

Todas las respuestas

  • Muéstrenos cómo vincula usted su DGV con SQL Server.

    Jose R. MCP
    Code Samples

    martes, 13 de noviembre de 2012 15:01
    Moderador
  • pero cuando modifico la consulta por otra en la cual poseo clausulas sumarias (sum,avg,count) y group by mi data grid no muestra nada

    pero esa query que tiene problemas devuelve lso campos con los nombres que defines en el grid

    o sea usas alias en lso campos

    select campo, SUM(campo1) AS sumacampo1, SUM(campo2) AS sumacampo2 FROM Tabla

    GROUP BY campo

    sino ampea el campo del grid con el de la query seguro no lo muestre


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 13 de noviembre de 2012 15:01
  • mi codigo de consulta es el siguiente

    select

    D.nro_alquiler 'Numero de Alquiler',

    sum (D.pre_unit * D.cantidad) 'Importe Total',

    sum (D.cantidad) 'Cantidad Total',

    avg(D.pre_unit * D.cantidad) 'Importe Promedio', A.cod_socio 'Codigo de Socio', S.nom_socio + ' ' + S.apel_socio 'Nombre y Apellido de Socio',

    G.tipo 'Genero', D.cod_pel 'Codigo de pelicula'

    from

    Detallealquiler D

    inner join

    alquileres A

    on D.nro_alquiler = A.nro_alquiler

    inner join

    socios S

    on A.cod_socio = S.cod_socio

    inner join

    peliculas P

    on P.cod_pel = D.cod_pel

    inner join

    generos G

    on P.id_genero = G.id_genero

    where

    S.nom_socio not like '[a-f]%'

    and

    P.id_genero not in (1,10)

    Group by D.nro_alquiler,A.cod_socio, D.cod_pel,S.nom_socio + ' ' + S.apel_socio, G.tipo

    order by 4 desc, 8

    martes, 13 de noviembre de 2012 15:30
  • Usted dijo que su consulta ejecuta bien así que no estoy interesado en este momento en la consulta, aunque debo decir que ese ORDER BY me parece extraño, pero creo que es una sintaxis que no uso nunca.

    Pero en fin, si usted está felíz con la consulta, yo también.

    ¿Cómo ejecuta usted esta consulta y cómo asigna los resultados al DGV?


    Jose R. MCP
    Code Samples


    martes, 13 de noviembre de 2012 15:32
    Moderador
  • entiendo 

    realizo la coneccion a la base mediante una clase conector donde tengo los parametros

    class Conector
        {
            SqlConnection connection;
            string dataSetString = "dss";

            public string pDataSetString
            {
                set { dataSetString = value; }
                get { return dataSetString; }
            }

            public Conector(string connectionString)
            {
                this.connection = new SqlConnection(connectionString);
            }
            
            public DataSet fillDs(string sql)
            {
                DataSet ds = new DataSet();
                SqlDataAdapter dataAdapter = new SqlDataAdapter(sql, connection);
                try
                {
                    connection.Open();
                    dataAdapter.Fill(ds, dataSetString);
                }
                catch (Exception e)
                {
                    callError();
                    ds = null;
                }
                connection.Close();
                return ds;
            }

            public void insertData(string sql) 
            {
                System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = sql;
                cmd.Connection = connection;

                try
                {
                    connection.Open();
                    cmd.ExecuteNonQuery();
                    connection.Close();
                }catch(Exception e) {callError();}
            }


    y luego relleno mi datagridview de la siguiente manera 

    string sql = " Mi cosnulta " +;
                dataGridView1.DataSource = con.fillDs(sql);
                dataGridView1.DataMember = con.pDataSetString;

    vuelvo a repetir si cambio el texto de la consulta el datagrid muestra los datos perfectamente el problema es con esta en particular


    martes, 13 de noviembre de 2012 15:37
  • mas abajo publique el codigo de la consulta y como se rellena el data grid 
    martes, 13 de noviembre de 2012 15:48
  • ¿Qué hace el método callError()?  Porque sospecho que no lanza la excepción nuevamente y veo que después de este método usted simplemente setea ds a null y lo devuelve.  ¿Cómo entonces informa fillDS() que hubo un error?  Si mis sospechas son correctas, hay un error a la hora de ejecutar la consulta y su catch() lo está desapareciendo.

    Jose R. MCP
    Code Samples

    • Propuesto como respuesta webJoseModerator martes, 13 de noviembre de 2012 17:10
    martes, 13 de noviembre de 2012 16:10
    Moderador
  •  private void callError()
            {
                ErrorWindow errwin = new ErrorWindow();
                errwin.ShowDialog();
            }

    voy a probar ejecutar la consulta sin try y catch aver que sucede

    martes, 13 de noviembre de 2012 16:41
  • imagino si pones un brekpoint aqui

    catch (Exception e)
                {
                    callError();
                    ds = null;
                }

    al eejcutar esa query no pasa por alli no ? porque puede que el query falle y no te este informando

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 13 de noviembre de 2012 16:41
  • si entiendo pero lo raro leandro es que la query ejecutada en sql no falla por lo tanto al estar copiada tal cual no deberia fallar aqui 

    martes, 13 de noviembre de 2012 16:44
  • Depure su código línea por línea y mientras tanto, copie y pegue la consulta en la variable sql del método fillDS() para validarla aquí.

    Jose R. MCP
    Code Samples

    martes, 13 de noviembre de 2012 17:04
    Moderador
  • LES AGRADEZCO SU AYUDA FINALMENTE HICE LO SIGUIENTE

    ELIMINE EL TRY Y CATCH Y DESCUBRI QUE ME ENVIABA COMO ERROR UN ERROR  DE SINTAXIS CERCA DE P VOLVI A ESCRIBIR LA CONSULTA Y SE SOLUCIONO

    SEPAN DISCULPAR FUE UN ERROR DE TIPEO

    PERDON POR HABERLES ROBADO SU TIEMPO

    MUCHAS GRACIAS DE VERDAD POR SU AYUDA

    martes, 13 de noviembre de 2012 17:05
  • Excelente.  Le queda como experiencia que las excepciones nunca deben descartarse porque esconden hechos importantes.

    Jose R. MCP
    Code Samples

    martes, 13 de noviembre de 2012 17:10
    Moderador