none
porque no se muestra la info de un ddl como la envio de sql RRS feed

  • Pregunta

  • hola

    cargo un ddl con un procedimiento almacenado, el mismo le envia fechas con formato yyyymmdd

    pero cuando se muestran salen ddmmyyyy. alguien sabe como puedo darle el formato que quiero?

    Dim command_fechas As New SqlCommand("  exec pr_ls_a_periodos_pago @codigo_tipo_periodo='   ',@cerrado='0',@jornada_inicial=' ',@jornada_final=' '", conexion)
            Dim adp_fechas As New SqlDataAdapter(command_fechas)
            Dim dt_jornadas As New DataTable

            adp_fechas.Fill(dt_jornadas)
            ddl_jornadas.DataTextField = "jornada_inicial"
            ddl_jornadas.DataValueField = "jornada_inicial"
            ddl_jornadas.DataSource = dt_jornadas
            ddl_jornadas.DataBind()

    sábado, 28 de enero de 2017 13:05

Respuestas

  • Revisa el tipo de dato que tienen los valores devueltos por el procedimiento almacenado. Si son de tipo DateTime, estos valores NO TIENEN FORMATO. Devuelven el valor en binario, y es responsabilidad del programa que los muestra el ponerles el formato deseado en el momento de la presentación. Por eso, si llamas al procedimiento desde SSMS, puede que se vean en un formato determinado (el que les aplique el SSMS) y cuando los cargues en el ddl tengan otro formato (el que les aplique por defecto el ToString de .Net).

    Si el procedimiento se usa para más cosas, y en consecuencia no puedes o no debes cambiarlo para que devuelva varchar con el formato ya aplicado (en lugar de datoetime), entonces mi sugerencia es que no hagas un databind directo del datatable con el ddl, sino que añadas uno por uno los Items usando un bucle, y les apliques formato con un .ToString("yyyyMMDD") en el momento de añadirlos. Aunque esto requiere tres líneas más de código, a la hora de ejecutarlo no supone ninguna pérdida de rendimiento porque el DataBind ejecuta por dentro un bucle igual de todas maneras.

    • Propuesto como respuesta Willams Morales sábado, 28 de enero de 2017 17:49
    • Marcado como respuesta davis1204 martes, 31 de enero de 2017 14:18
    sábado, 28 de enero de 2017 16:26

Todas las respuestas

  • Revisa el tipo de dato que tienen los valores devueltos por el procedimiento almacenado. Si son de tipo DateTime, estos valores NO TIENEN FORMATO. Devuelven el valor en binario, y es responsabilidad del programa que los muestra el ponerles el formato deseado en el momento de la presentación. Por eso, si llamas al procedimiento desde SSMS, puede que se vean en un formato determinado (el que les aplique el SSMS) y cuando los cargues en el ddl tengan otro formato (el que les aplique por defecto el ToString de .Net).

    Si el procedimiento se usa para más cosas, y en consecuencia no puedes o no debes cambiarlo para que devuelva varchar con el formato ya aplicado (en lugar de datoetime), entonces mi sugerencia es que no hagas un databind directo del datatable con el ddl, sino que añadas uno por uno los Items usando un bucle, y les apliques formato con un .ToString("yyyyMMDD") en el momento de añadirlos. Aunque esto requiere tres líneas más de código, a la hora de ejecutarlo no supone ninguna pérdida de rendimiento porque el DataBind ejecuta por dentro un bucle igual de todas maneras.

    • Propuesto como respuesta Willams Morales sábado, 28 de enero de 2017 17:49
    • Marcado como respuesta davis1204 martes, 31 de enero de 2017 14:18
    sábado, 28 de enero de 2017 16:26
  • Hola que tal, son de tipo varchar. entendi muy poco lo que me comentaste. de que forma deberia hacerlo?
    lunes, 30 de enero de 2017 14:56
  • hola

    partamos de la base que ejecutas de form incorrecta el procedure, deberias usar

    Dim command As New SqlCommand("pr_ls_a_periodos_pago", conexion)
    command.CommandType = CommandType.Procedure
    command.Parameters.AddWithValue(@cerrado, 0)
    command.Parameters.AddWithValue(@jornada_inicial, " ")
    command.Parameters.AddWithValue(@jornada_final, " ")
    
    Dim adp_fechas As New SqlDataAdapter(command)
    Dim dt_jornadas As New DataTable
    adp_fechas.Fill(dt_jornadas)
    
    ddl_jornadas.DataTextField = "jornada_inicial"
    ddl_jornadas.DataValueField = "jornada_inicial"
    ddl_jornadas.DataSource = dt_jornadas
    ddl_jornadas.DataBind()

    defines el commandtype y pasas parametros

    respecto al formato de la fecha puede que la cultura este afectando el formato, quizas si desde el procedure lo envias como cadena no lo cambie, sino deberias definir la cultura

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 30 de enero de 2017 16:47