jueves, 31 de marzo de 2011

Enlazando el GridControl con datos

Enlazando el GridControl con datos.


La principal propiedad para enlazar la columna con datos es: FielName.

Pero para que se vea aun más decente, usaremos también las propiedades Caption y (Name), esta ultima es para tener un mejor control de las columnas, ya que cuendo son muchas es más cómodo controlarlas poniéndoles un nombre, tal como se muestra en la siguiente imagen.


Construyendo las columnas en el GridControl -> Run Designer -> Columns



Para este ejemplo crearemos cuatro columnas y las propiedades mencionadas anteriormente las estableceremos de la siguiente manera.
(name)                 FielName        Caption
colID                      ID                  Id
colNombre            NOMBRE        Nombre
colEdad                EDAD             Edad
colSexo                SEXO              Sexo

Agregar el siguiente código en el load o en el constructor.


Dim TablaClientes As New DataTable("CLIENTES")
'Las columnas deben corresponder con la propiedad FielName, y debemos 
'especificar el tipo de dato para que el GridControl controle los errores de tipos.
With TablaClientes.Columns
    .Add("ID", GetType(Integer))
    .Add("NOMBRE", GetType(String))
    .Add("EDAD", GetType(Integer))
    .Add("SEXO", GetType(String))
End With
With TablaClientes.Rows
    .Add("1", "Raciel Luis", "25", "Hombre")
    .Add("2", "Gabriela Torres", "45", "Mujer")
End With
Me.GridControl1.DataSource = TablaClientes

AddComboBoxEnGridControl() 'El codigo esta más abajo.


Nota: Cabe mencionar que si tenemos una tabla en un DataSet en nuestro diseñador de esquemas, este se puede enlazar de manera automática al control, tal como se muestra en la siguiente imagen.

GridControl en tiempo de ejecución.


Si nos damos cuenta, podemos editar los campos, para no permitir editarlos nos vamos a las propiedades de la columna (AllowEdit la establecemos como False y ReadOnly como True) para que no nos permita editar el registro de la columna deseada, en este ejemplo la columna nombre.



Como mencionaba anteriormente que de debe poner el tipo de dato de las columnas de la tabla que se asociara al control, para aprovechar las validaciones integradas del mismo control. En la siguiente imagen estamos tratando de insertar letras en el campo EDAD, lo cual va a ser incorrecto porque lo definimos como Integer. Ya sea desde codigo o desde el diseñados de esquemas (DataSet's).


Ademas podemos hacer uso de los filtros que agregamos a nuestro control, para asi evitarnos hacer consultas SQL a la base base de datos o en propio DataTable.

Insertando ComboBox en el GridControl

Tomaremos para este ejemplo el campo Sexo.

Agregamos el siguiente procedimiento, el cual lo podemos llamar después del código anterior a este.

   Sub AddComboBoxEnGridControl()        'Repositorio de Items
        Dim RepositorioItemsSexo As New DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit
        'Agregando el ComboBox en el GridControl
        Dim TablaSexo As New DataTable("SEXO")
        With TablaSexo.Columns
            .Add("IDSEXO")
            .Add("DESCRIPCION")
        End With
       TablaSexo.Columns("IDSEXO").Caption = "Id o clave"
       
 TablaSexo.Columns("DESCRIPCION").Caption = "Descripción"
        With TablaSexo.Rows
            .Add("M", "Masculino")
            .Add("F", "Femenino")
        End With
        With RepositorioItemsSexo
            .DataSource = TablaSexo
            .ValueMember = "IDSEXO"
            .DisplayMember = "DESCRIPCION"
        End With
        colSexo.ColumnEdit = RepositorioItemsSexo
    End Sub


Nota: para que funcione correctamente tenemos que cambiar los valores de los registros agregados a la tabla.

Quitar:

.Add("1", "Raciel Luis", "25", "Hombre")
.Add("2", "Gabriela Torres", "45", "Mujer")

Reemplazarlo por:
.Add("1", "Raciel Luis", "25", "M")
.Add("2", "Gabriela Torres", "45", "F")

Esto es porque el campo ya lo hemos enlazado a los datos de la tabla sexo.





Nota: Estos datos pueden ser obtenidos mediante una consulta a una base de datos.


Agregar un navegador de datos al GridControl.

Construyendo las columnas en el GridControl -> Run Designer -> Focus, Selection, Navigator -> Embedder Navigator 
y chequeamos la opcion UseEmbeddedNavigator



Ejecutamos la aplicación y veamos todo lo que hemos logrado con nuestro GridControl.




Pero antes de terminar con este control le voy a explicar como visualizar los datos para impresión y ademas exportarlos a distintos formatos de archivos.

Agregamos un boton en el formulario y agregamos la siguiente linea de código:

 Me.GridControl1.ShowPrintPreview()

Cuando hagamos clic veremos el preliminar de los datos.


Desde este reporteador podemos exportar la información a PDF, Excel, Word, etc.

14 comentarios:

  1. PORQUE NO PONES LOS CODIGOS PARA VERLOS EN EJECICION DESDE UNA PLATAFORMA DE WIN...

    ResponderEliminar
  2. Los códigos que están en el ejemplo son 100 % funcionales, lo único que debes de hacer es escribirlos tal cual a los ejercicios que hagas, compilas tu proyecto y listo.
    Los códigos los proporciono en imagen por lo mismo, para que no solamente sea copiar y pegar, sino que sea con el fin de aprender.

    Saludos.

    ResponderEliminar
  3. saludos como puedo hacer para poner un Data table o un SqlDataReader a un GRidControl ?

    ResponderEliminar
  4. Un SQLDataReader en una secuencia de lectura solo para delante, tendrias que llenar el Gridcontrol desde un DataSet o DataTable, tal como se muestra al inicio de este ejemplo: aqui va el codigo para llenar el GridControl desde un DataTable:

    Dim TablaClientes As New DataTable("CLIENTES")
    'Las columnas deben corresponder con la propiedad FielName, y debemos
    'especificar el tipo de dato para que el GridControl controle los errores de tipos.
    With TablaClientes.Columns
    .Add("ID", GetType(Integer))
    .Add("NOMBRE", GetType(String))
    .Add("EDAD", GetType(Integer))
    .Add("SEXO", GetType(String))
    End With
    With TablaClientes.Rows
    .Add("1", "Raciel Luis", "25", "Hombre")
    .Add("2", "Gabriela Torres", "45", "Mujer")
    End With
    Me.GridControl1.DataSource = TablaClientes

    ResponderEliminar
  5. Tengo una duda con respecto al GridControl, espero puedan ayudarme.

    1) Cargo los datos de mi BD, lleno el DataSource del GridControl.
    2) Debugeando el código reviso y efectivamente el DataSource se lleno correctamente, sin embargo en la vista del GridControl, no me muestra datos en la columna la cual está ligada a un GridLookUpEdit (el cual uso como repositorio de datos).

    Mi duda es, ¿como puedo enlazar los datos cargados de una columna, para que me muestre el contenido del GridLookUpEdit.

    No sé si me explique correctamente... espero puedan ayudarme saludos! :)

    ResponderEliminar
  6. Revisa el FieldName de la columa, porque las columnas del Grid control distinguen entra mayúsculas y minúsculas...esa columna debe corresponder con el ID del DataSource que vas a enlazar.

    ResponderEliminar
  7. Hola tengo una gran problema, tengo un grid control el cual esta enlazado a la base de datos ahora quiero agregarle una columna para ingresar datos y la agrege pero al ejecutar el programa ingreso datos pero se borran los datos ingresados cuando me cambio de celda, espero que me puedan, gracias!!

    ResponderEliminar
    Respuestas
    1. Suponiendo que tu Grid es para entrada de datos, yo podría suponer que el error es porque el FielName de tu Grid, no corresponde con la columna de tu base de datos...intenta cambiar eso,,,sino proporciona el código para ir mas ha detalle, tanto el esquema de tu base de datos, como el FielName de tu Grid...


      Posdata: Agradeceríamos que te loguearas con un ID para así llamarte por tu nick o nombre....

      Eliminar
    2. Se me paso decirte, que el GridControl es sensible a mayúsculas y minúsculas

      Eliminar
    3. Hola
      Tengo una tabla en mi base de datos llamada usuario donde almaceno el id, nombre del usuario, descripción de sus actividades, tengo otra tabla llamada registro donde se almacenan los el numero de sucesos en esa actividad.
      Así que en un grid uso un conjunto de datos para enlazar la tabla de usuarios donde solo muestro el nombre del usuario y la descripción, ahora le quiero agregar una columna para que el usuario registre los sucesos, el problema aquí es que esa columna nueva no la estoy relacionando con la base de datos y al momento de ejecutar la aplicación no conserva los valores.

      Eliminar
  8. Hola, buenas noches!
    Como puedo asignarle el valor a una celda cuando cambian los valores de otra celda.
    lo estoy haciendo con este evento. pero GV1_CellValueChanged( no me queda.

    y otra duda. como puedo sumar una columna determinada y cada vez que le de limpiar la pantalla se limpie la suma.

    todo lo hago con codigo en tiempo de ejecucion. defino columnas con codigo etc. gracias

    ResponderEliminar
  9. Hola buenas tardes!
    Es posible que en el combo sexo pudieramos llenarlo en cada linea con informacion diferente ejemplo:
    en gabriela torres al seleccionar el sexo apareciera masculino y femenino
    y si agregara otro registros me apareciera masculino,femenino, no definido

    ResponderEliminar
  10. Hola buenas tardes muy bueno la informacion, tengo una duda acerca de como ocultar la columna
    "IdSexo" que se creo en el ejemplo Insertando ComboBox en el GridControl
    .DataSource = TablaSexo
    .ValueMember = "IDSEXO"
    .DisplayMember = "DESCRIPCION"
    Como hacer referencia a la columna para ocultarla

    ResponderEliminar
  11. Como ocultar columna en ASPxGridview:

    ASPxGridView1.Columns[2].Visible = false;

    ResponderEliminar

Ajustar columnas de un GridView al contenido de los camps desde código.

  gridView1.OptionsBehavior.AutoPopulateColumns = true; //'generar automaticamente las columnas a raíz del dataset             gridVie...