none
Problema con un Datagridview RRS feed

  • Pregunta

  • Tengo un formulario que tiene un DataGridview que da los pagos del dia, hice ademas con un DataTimerPeeker, que cuando se selcciona una fecha "X" le debe dar los pagos, pero sale en blanco el DGV.

    Vi el sql y responde bien pero no muestar por que sera habre hecho algo malo le envio el codigo gracias

     private void btn_fechapelu_Click(object sender, EventArgs e)
            {
                string res;
                int ing;
                DataTable dt3;
                this.date2 = dtp_pelu.Value.ToShortDateString();
                dt3 = conx.popDTable("select t2.nombre as Nombre, t2.apellido as Apellido, t3.nombre as Servicio, t1.monto as Valor, t1.hora as Hora, t1.ticket as Ticket from t_trans as t1 inner join t_pelu as t2 on t1.pelu = t2.t_idpelu inner join t_servicio as t3 on t1.ss = t3.id_servicio where t1.pelu=" + this.id + " and t1.fecha = '" + this.date2 + "'");
                if (dt3.Rows.Count > 0)
                {
                    dgv_trans.DataSource = dt3;
                    //dgv_trans.DataSource = dt3;
                }
                dt3.Clear();
                dt3 = conx.popDTable("select SUM(monto) as monto from t_trans where fecha = '" + this.date2 + "'and pelu = " + this.id + "");
                res = dt3.Rows[0]["monto"].ToString();
                if (res == "")
                {
                    ing = 0;
                }
                else
                {
                    ing = Convert.ToInt32(dt3.Rows[0]["monto"].ToString());
                }
                int porc = Convert.ToInt32(lbl_porcentaje.Text);
                decimal dc = (decimal)porc;
                decimal r = ((decimal)ing * dc) / 100;
    
    
                lbl_totalcortes.Text = "Total del corte es =" + ing.ToString();
                lbl_cortespelu.Text = "Total Peluqueros es : " + r.ToString();
            }
    
    como ven hago un if y dentro del if relleno el DGV con un DataSource, por ejemplo me sale que hau 10 filas, posteriormente hago una suma de todo lo ingresado y me da el total agradecere su ayuda gracias


    Una respuesta JP

    miércoles, 30 de marzo de 2016 14:46

Respuestas

  • Primero que nada:  Está muy mal que concatene SQL.  Aprenda de consultas parametrizadas.

    La línea dt3.Clear() borra el DataTable, que es la fuente del DGV.  Aunque la consulta devuelva datos, usted los borra.  Elimine esa línea.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta jpgrover miércoles, 30 de marzo de 2016 17:55
    miércoles, 30 de marzo de 2016 15:19
    Moderador

Todas las respuestas

  • Primero que nada:  Está muy mal que concatene SQL.  Aprenda de consultas parametrizadas.

    La línea dt3.Clear() borra el DataTable, que es la fuente del DGV.  Aunque la consulta devuelva datos, usted los borra.  Elimine esa línea.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta jpgrover miércoles, 30 de marzo de 2016 17:55
    miércoles, 30 de marzo de 2016 15:19
    Moderador
  • Gracias me resulto y tienes razon, era el clear(), pero por qeu dice que esta mal la concatenar SQL, yo no lo concateno, sino hago el sql  en forma directa, creo que es mas rapido la consulta y menos enredada que la opcion que das.

    Saludos y gracias .


    Una respuesta JP

    miércoles, 30 de marzo de 2016 17:55
  • Me alegra que se le resolviera el problema.

    Esto es concatenar SQL:

    dt3 = conx.popDTable("select SUM(monto) as monto from t_trans where fecha = '" + this.date2 + "'and pelu = " + this.id + "");
    Está mal porque entra uno en problemas con las fechas y valores de punto flotante y porque entra uno en riesgo de SQL injection.  Ningún programador que se de a respetar va a validarle el uso de SQL concatenado.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta jpgrover miércoles, 30 de marzo de 2016 18:14
    • Desmarcado como respuesta jpgrover miércoles, 30 de marzo de 2016 18:14
    miércoles, 30 de marzo de 2016 18:04
    Moderador
  • Gracias estudiare el caso, gracias

    Una respuesta JP

    miércoles, 30 de marzo de 2016 18:14