none
Mostrar un substring de una columna en un datagridview RRS feed

  • Pregunta

  • Hola, estoy trabajando con una aplicacion de escritorio y un datagridview

    Recibo del datasource una consulta en SQL con un campo "Formato", y queria mostrar en una columna ese campo, pero sin los primeros 3 caracteres. El problema que tengo es que el stored procedure no se puede modificar para agregar un substring y traer los datos ya formateados por un problema en la empresa donde estoy trabajando. Y tampoco puedo hacer un stored nuevo (si, tengo todos los problemas jaja)

    Mi pregunta es, hay alguna forma de setear alguna propiedad de column del datagrid o algun evento donde pueda poner que se recorte o haga un split de los primeros 3 caracteres de ese campo? No pude encontrar la forma. Lei algo de un evento RowDataBound pero el datagridview con el que trabajo no tiene ese evento

    Gracias por la ayuda!

    lunes, 4 de mayo de 2020 5:25

Todas las respuestas

  • Primero ejecuta el "Fill" para traer los datos desde el procedimiento a un DataTable. Y después, antes de conectar ese DataTable con el DataSource del DataGridView, modifica los datos dentro del DataTable para que queden como tú los quieres. Puedes recorrer las filas del DataTable con un bucle y truncar la columna deseada para que solo quede con tres caracteres, o puedes añadir una columna nueva y copiar ahí los tres primeros caracteres de la otra.

    lunes, 4 de mayo de 2020 6:05
    Moderador
  • hola

    En que objeto asignas los datos que recuperas desde el procedure ?

    Si es un datatable esta complicado, se que si usas un datatable tipado podrias agregar una columna computada

    Lo que recomendaria es que vulques los datos de la ejecucion del procedure a una clase que tu crees, entonces podrias adicionar una propiedad que tenga en el get ese substring

    public class Class1{
    
       //resto propiedades
    
       public string Prop1{
    
            get { return this.OtraProp.Substring(...); }
    
        }
    
    }

    Usarias un SqlDataReader para iterar en un while y cargar un List<Class1> que luego asignas al DataSource del grid

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 4 de mayo de 2020 7:28
  • Si es un datatable esta complicado

    ¿Por qué está complicado? El DataTable es de lectura/escritura, puedes cambiarle el valor a la columna anes de hacerle el databinding:

    miDataAdapter.Fill(miDataTable); // Este se supone que es el código que ya tienes para traer los datos
    
    foreach (DataRow dr in miDataTable.Rows)
    {
        dr["miColumna"] = ((string)dr["miColumna"]).SubString(0,3);
    }
    
    miDataGridView.DataSource = miDataTable; // Esto se supone que ya lo tenías en el código para mostrar los datos

    lunes, 4 de mayo de 2020 12:25
    Moderador
  • hola

    >>¿Por qué está complicado?

    Complicado porque la idea era que la columna se calculara sola en base a los datos, no evalue iterar cada row para aplicar el valor

    por eso sugueri usar una class propia con una propiedad

    Se que se puede realizar con columnas calculadas en un dataset tipado, pero no esta facil explicarlo, es tecnologia bastante vieja

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 4 de mayo de 2020 12:29
  • Hola

     

    ¿Alguna actualización sobre la consulta realizada? ¿Alguna de las respuestas proporcionadas te ayudó?

     

    Espero tu respuesta.

     

    Gracias por usar los foros de MSDN.

     

     

    Luis Diego Mora

     

    --------------------------------------------------------------------------

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    martes, 5 de mayo de 2020 17:46
    Moderador