none
problema fechas dd/MM/yyyy MM/dd/yyyy RRS feed

  • Pregunta

  • tengo  un gridview que cambia las fechas al actualizar

    si ingreso asi 08/02/2011

    despues de actualizar, muestra en la BD y en el gridview

    asi 02/08/2011

    aquí dejo un video de lo que pasa

    http://www.youtube.com/watch?v=UaPWJhmeuns

    en los primeros 30 segundos se aprecia el problema =/

    estoy con ASP.net C# VS 08 y SQLSERVER 08 tambien


    10GO!
    martes, 8 de febrero de 2011 18:30

Todas las respuestas

  • hola

    lo del cambios del mes por el dia se debe a la configuracion regional que toma el sitio

    si necesitas puede fijar a uno solo

     

    C ó mo: Establecer referencia cultural actual mediante programaci ó n en una aplicaci ó n ASP.NET

    o sea en el web.config define

    <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="es-AR" uiCulture="es-AR"/>

    por supuesto en tu caso sera la cultura de ut pais, con esto defines el formato de la fecha

     

    - recuerda ademas cuando actualizas de usar parametros en la query, no concatenes la query en un string

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 8 de febrero de 2011 23:56
  • Gracias por responder,  aunque antes ya lo habia definido pero no sabía como mostrar el culture en la pagina pues he hecho las definiciones del culture en el WEB.config y a nivel de la página y me muesta

            TextBox4.Text = CultureInfo.CurrentCulture.EnglishName;

            Spanish (Peru)

            [ Previamente probé con en-ES, fr-FR...]

    aún así  sigue cambiando las fechas ademas de intentar muchas otras cosas, creo que es lo segundo que me dices

    **- recuerda ademas cuando actualizas de usar parametros en la query, no concatenes la query en un string-**

    • me podrías detallar un poco más

    mi código de acceso a datos es el siguiente

    public bool update_cirugia(ecirugias ecirugias)
        {
          Database db = DatabaseFactory.CreateDatabase();
          DbCommand SQL = db.GetSqlStringCommand("update cirugias set id_detalle=@id_detallex, lectiva=@lectivax, doc1=@doc1x, doc2=@doc2x, fecha=@fechax, userid=@useridx, id_anestesiologo=@id_anestesiologox, obs=@obsx where id_intervencion=@id_intervencionx");
          db.AddInParameter(SQL, "id_intervencionx", DbType.Int32, ecirugias.Id_intervencion);
          db.AddInParameter(SQL, "id_detallex", DbType.Int32, ecirugias.Id_detalle);
          db.AddInParameter(SQL, "lectivax", DbType.String, ecirugias.Lectiva);
          db.AddInParameter(SQL, "doc1x", DbType.Int32, ecirugias.Doc1);
          db.AddInParameter(SQL, "doc2x", DbType.Int32, ecirugias.Doc2);
          db.AddInParameter(SQL, "fechax", DbType.DateTime, ecirugias.Fecha);
          db.AddInParameter(SQL, "useridx", DbType.Guid, ecirugias.Userid);
          db.AddInParameter(SQL, "id_anestesiologox", DbType.Int32, ecirugias.Id_anestesiologo);
          
          if (ecirugias.Obs == null || ecirugias.Obs.Length<=0)
          {
            ecirugias.Obs = "..."; 
          }
          db.AddInParameter(SQL, "obsx", DbType.String, ecirugias.Obs);
          int huboexito = db.ExecuteNonQuery(SQL);
          if (huboexito == 1)
            return true;
          else
            return true;
    
        }

    
    

     


    10GO!
    • Editado CDiego miércoles, 9 de febrero de 2011 0:57 c
    miércoles, 9 de febrero de 2011 0:55
  • pero alli veo que suas parametros, ya que usas el AddInParameter() y los @ en la query, o sea no estas concatenando los valore en el string

    - imagino que  ecirugias.Fecha es del tipo Datetime

    si poens un break alli he inspeccionas la fecha esta esta en el formato correcto

    - igual es raro que al definir la cultura en el web.config n o la tome el sitio y siga mostrando mal la hora, ya que segun parece por el efecto esta tomando la configuracion de en-US, por eso pone los meses primero

    oko igual esto es solo un tema de representacion, cuando conviertas a DateTime deberia hacerlo correctamente

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 9 de febrero de 2011 2:19
  • El cambio lo hace al darle clic en el boton ACTUALIZAR la fecha sale con el formato dd/MM/yyyy pero este dato  al llegar en la clase para pasar el dato a los parametros del query llegan así MM/dd/yyyy =/

    aquí grabé el video [01:08]  con el break de la aplicación, al momento de recibir el dato en la cadena de UPDATE

    http://www.youtube.com/watch?v=9JwKxuI59EY

    • no creo que sea necesario convertir, probé obtener el DAY, MONTH y YEAR luego unirlos en una nueva variable DATETIME pero que fue concatenada así DAY+"/"+MONTH+"/"+"YEAR". En el update al momento de recibir el dato desde el gridview.[NO FUNCIONÓ ^^]
    • También intenté con ecirugias.fecha.toshortdatestring;. [NO FUNCIONÓ ^^]
    • Quizas algo hice mal al convertir, o algo que no traté?

    10GO!
    miércoles, 9 de febrero de 2011 4:09
  • alguien sabe algo sobre esto?

    ObjectDataSource ignores culture information when updating

    http://connect.microsoft.com/VisualStudio/feedback/details/105016/objectdatasource-ignores-culture-information-when-updating

    When using a business object with the ObjectDataSource
     control, culture information seems to be ignored when
     property values are extracted from the TextBox control
     generated by a BoundField. The same is true when
     a TemplateField is used.

     

    =(


    10GO!
    • Editado CDiego jueves, 10 de febrero de 2011 23:17 v
    jueves, 10 de febrero de 2011 23:14
  • hola

    puede que internamente la variable dfel tipo fecha arme el formato de la fecha de forma distinta a como tu la trabajas

    lo importante es que si pones la fecha 01/10 sea el 01 del dia y el 10 del mes, si esto cuando lo escribes lo registra asi en la tabla y cuando lo representas tambien lo haces que en la variable lo invisrta no seria importante

    igualmente una duda, veo que al parametero le pasas un ecirugias.Fecha, ahora bien la conversion del TextBox que marcas en el control a esta propiedad como la haces ?

    usas el Convert.ToString() pero indicando la cultura, algo como esto:

    ecirugias.Fecha = Convert.ToDouble(txtFecha.Text, CultureInfo.CreateSpecificCulture("es-ES"))

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 11 de febrero de 2011 3:16
  • Hola, es el gridview el que se niega a enviar los datos de fechas inválidas por ejemplo 23/02/2011 la toma como inválida MM/dd/yyyy y no llega a las clases, después de lo que leí creo que hay problemas entre el OBJECTDATASOURCE y la CAPADENEGOCIO.

    • He buscado donde formatear los datos en el GRIDVIEW para enviar los datos a las clases pero no he podido pues el encargado de enlazar los datos entre el GRIDVIEW y las clases es el OBJECTDATASOURCE, no es así?, he tratado de hacer ese tipo de formateo en la CAPA DE ACCESO A DATOS pero es inútil pues como te digo el GRIDVIEW no acepta la fecha inválida.
    • Luego probé el ExtendedObjectDataSource funciona!!! no cambia las fechas con lo que he descartado que sea error de código pero ese componente es desarrollado por otra empresa y es de pago =/ así que lo he dejado. [ por cierto muy bien logrado el componente ]
    • Bueno en el LINK que publiqué muestras algunas soluciones mas no las veo muy claras o no las logro entender, igual las sigo releyendo a ver que sale.
    Saludos!
    10GO!
    viernes, 11 de febrero de 2011 4:40