none
filtrando datatable en c# Visual studio 2017 campos de tipo datetime RRS feed

  • Pregunta

  • Hola buenas noches, estoy filtrando un datatable que tiene campos de tipo fecha, pero me esta gegerando error como si el formato no fuera el correcto, les publico la imagen:

    La programacion asosiada a ese boton buscar se los coloco:

     cDatos objDatos  =  new cDatos();
                cUtilities cUtilities = new cUtilities();

                //DtgMad.DataSource = objDatos.EmployeeHistoryAll().Tables[0];

                //objDatos.createDatatable();

                try
                {


                    DataSet DataBase = new DataSet("DataBase");

                DataTable HistoryTable = DataBase.Tables.Add("History");
                DataTable HistoryTableFiltered = DataBase.Tables.Add("HistoryFiltered");


                DataColumn pkEventSecuen =
                HistoryTable.Columns.Add("EventSecuen", typeof(Int32));

                HistoryTable.Columns.Add("EventDate", typeof(DateTime));
                HistoryTable.Columns.Add("EventTime", typeof(DateTime));
                HistoryTable.Columns.Add("EventPlace", typeof(String));

                HistoryTable.Columns.Add("EventName", typeof(String));

                HistoryTable.Columns.Add("EventUserID", typeof(String));

                HistoryTable.Columns.Add("EventUserName", typeof(String));

                HistoryTable.Columns.Add("EventUserDept", typeof(String));

                HistoryTable.Columns.Add("EventDoorMode", typeof(String));

                HistoryTable.Columns.Add("EventFunKeyName", typeof(String));

                HistoryTable.Columns.Add("EventDesc", typeof(String));


                HistoryTable.PrimaryKey = new DataColumn[] { pkEventSecuen };

                foreach (DataRow row in objDatos.EmployeeHistoryAll().Tables[0].Rows)
                {
                    DataRow rowNew = HistoryTable.NewRow();
                    //MessageBox.Show(row["EventSecuen"].ToString() + ',' + row["EventDate"].ToString() + ',' + row["EventTime"].ToString());


                    rowNew["EventSecuen"] = Convert.ToInt32(row["EventSecuen"].ToString());

                    rowNew["EventDate"] = Convert.ToDateTime(row["EventDate"].ToString());
                    rowNew["EventTime"] = Convert.ToDateTime( row["EventTime"].ToString()).ToShortTimeString();

                    rowNew["EventPlace"] = row["EventPlace"].ToString();
                    rowNew["EventName"] = row["EventName"].ToString();
                    rowNew["EventUserID"] = row["EventUserID"].ToString();
                    rowNew["EventUserName"] = row["EventUserName"].ToString();
                    rowNew["EventUserDept"] = row["EventUserDept"].ToString();
                    rowNew["EventDoorMode"] = row["EventDoorMode"].ToString();
                    rowNew["EventFunKeyName"] = row["EventFunKeyName"].ToString();
                    rowNew["EventDesc"] = row["EventDesc"].ToString();


                    //HistoryTable.Rows.Add(row);
                    HistoryTable.ImportRow(row);


                }
                string expression;
                string cedula = txtCedula.Text.Trim();
                DateTime dtFechaInicio = dtpFechaIni.Value;
                DateTime dtFechaFin = dtpFechaFin.Value;

                expression = "EventUserID ='" + cedula + "' AND EventDate >=#"+ dtFechaInicio.ToShortDateString() +"# AND EventDate < #"+ dtFechaFin.ToShortDateString() + "#";


                //expression = "EventUserID='12738158' AND EventDate >= #01/01/2019# AND  EventDate <= #12/12/2019#";
                DataRow[] foundRows;


               
                foundRows = HistoryTable.Select(expression);





                DataColumn pkEventSecuenFiltered =
              HistoryTableFiltered.Columns.Add("EventSecuen", typeof(Int32));

                HistoryTableFiltered.Columns.Add("EventDate", typeof(DateTime));
                HistoryTableFiltered.Columns.Add("EventTime", typeof(DateTime));
                HistoryTableFiltered.Columns.Add("EventPlace", typeof(String));

                HistoryTableFiltered.Columns.Add("EventName", typeof(String));

                HistoryTableFiltered.Columns.Add("EventUserID", typeof(String));

                HistoryTableFiltered.Columns.Add("EventUserName", typeof(String));

                HistoryTableFiltered.Columns.Add("EventUserDept", typeof(String));

                HistoryTableFiltered.Columns.Add("EventDoorMode", typeof(String));

                HistoryTableFiltered.Columns.Add("EventFunKeyName", typeof(String));

                HistoryTableFiltered.Columns.Add("EventDesc", typeof(String));


                HistoryTableFiltered.PrimaryKey = new DataColumn[] { pkEventSecuenFiltered };





                foreach (var item in foundRows)
                {

                    DataRow rowNew = HistoryTableFiltered.NewRow();


                    rowNew["EventSecuen"] = Convert.ToInt32(item["EventSecuen"].ToString());

                    rowNew["EventDate"] = Convert.ToDateTime(item["EventDate"].ToString());
                    rowNew["EventTime"] = Convert.ToDateTime(item["EventTime"].ToString()).ToShortTimeString();

                    rowNew["EventPlace"] = item["EventPlace"].ToString();
                    rowNew["EventName"] = item["EventName"].ToString();
                    rowNew["EventUserID"] = item["EventUserID"].ToString();
                    rowNew["EventUserName"] = item["EventUserName"].ToString();
                    rowNew["EventUserDept"] = item["EventUserDept"].ToString();
                    rowNew["EventDoorMode"] = item["EventDoorMode"].ToString();
                    rowNew["EventFunKeyName"] = item["EventFunKeyName"].ToString();
                    rowNew["EventDesc"] = item["EventDesc"].ToString();


                    //HistoryTable.Rows.Add(row);
                    HistoryTableFiltered.ImportRow(item);



                }


                DtgMad.DataSource = HistoryTableFiltered;

                cUtilities.FormatearGrid(DtgMad);

                }
                catch (Exception ex)
                {

                    MessageBox.Show(string.Format("Disculpe hubo un problema, Motivo: {0}", ex.Message), "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
             
                }

    Si bueno el cuento es largo, les aconsejo ir a otra pregunta que realize sobre meter un datatable en otro datatable gracias a una Base de datos de access con campos del mismo tipo, estoy formateando bien mis campos de tipo fecha??? sera un problema de la configurcion regional del PC???? 

    Espero me puedan orientar!

    viernes, 13 de diciembre de 2019 1:15

Respuestas

  • hola

    Una duda, por alguna razon es que usaste datatable en lugar de List<> definiendo clases? creo que con clases y listas aplicando linq hubiera sido mucho mas simples

    >>pero me esta gegerando error como si el formato no fuera el correcto

    cual es el mensaje de error exacto que recibes ?

    intentaste darle otro formato como ser

    expression = string.Format("EventUserID ='{0}' AND EventDate >=#{1:yyyy/MM/dd}# AND EventDate < #{2:yyyy/MM/dd}#", cedula, dtFechaInicio, dtFechaFin);

    quizas con formato yyyy/MM/dd lo reconozca


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 13 de diciembre de 2019 13:29
  • Hola Leandro, Gracias por responder, ya estoy probando tu codigo en el desarrollo y esta fino!! eso mesmo era! mi pana!, 

    Lo estaba pasando asi y me daba el error de tipo!

      string strdtFechaInicio = dtpFechaIni.Value.ToShortDateString();
                    string strdtFechaFin = dtpFechaFin.Value.ToShortDateString(); 

                expression = "EventUserID ='" + cedula + "' AND EventDate >= #" + strdtFechaInicio + "# AND EventDate <= #" + strdtFechaFin + "#";

    pero lo he hecho como me ejemplificaste! y funciono! Gracias!, este codigo podria fallar en una pc con una configuracion reguional distinta???

    viernes, 13 de diciembre de 2019 13:44

Todas las respuestas

  • hola

    Una duda, por alguna razon es que usaste datatable en lugar de List<> definiendo clases? creo que con clases y listas aplicando linq hubiera sido mucho mas simples

    >>pero me esta gegerando error como si el formato no fuera el correcto

    cual es el mensaje de error exacto que recibes ?

    intentaste darle otro formato como ser

    expression = string.Format("EventUserID ='{0}' AND EventDate >=#{1:yyyy/MM/dd}# AND EventDate < #{2:yyyy/MM/dd}#", cedula, dtFechaInicio, dtFechaFin);

    quizas con formato yyyy/MM/dd lo reconozca


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 13 de diciembre de 2019 13:29
  • Hola Leandro, Gracias por responder, ya estoy probando tu codigo en el desarrollo y esta fino!! eso mesmo era! mi pana!, 

    Lo estaba pasando asi y me daba el error de tipo!

      string strdtFechaInicio = dtpFechaIni.Value.ToShortDateString();
                    string strdtFechaFin = dtpFechaFin.Value.ToShortDateString(); 

                expression = "EventUserID ='" + cedula + "' AND EventDate >= #" + strdtFechaInicio + "# AND EventDate <= #" + strdtFechaFin + "#";

    pero lo he hecho como me ejemplificaste! y funciono! Gracias!, este codigo podria fallar en una pc con una configuracion reguional distinta???

    viernes, 13 de diciembre de 2019 13:44
  • hola

    >>este codigo podria fallar en una pc con una configuracion reguional distinta?

    si toma la cultura con un formaro diferente, si

    por eso use algo fijo para que convierta a yyyy/MM/dd

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 13 de diciembre de 2019 14:27