vb.net |
Martes 01 de abril de 2008 a las 04:41:29
Vamos a ver cómo se añade una columna con un botón o un checkbox en un Datagrid.
Para poder hacerlo hay que crear las columnas del Datagrid en tiempo de ejecución, por lo tanto, la propiedad AutoGenerateColumns del Datagrid debe estar en False.
Lo primero de todo es recuperar los datos que queremos mostrar. Tened en cuenta que el formato de la tabla y el nombre de los campos que tenga el dataset deben ser los mismos que los del Datagrid.
En mi caso:
Private Sub montaCausas(ByRef causas As DataSet)
Dim i As Integer
Dim tabla As DataTable
Dim campo As DataColumn
Dim registro As DataRow
tabla = New DataTable("Observaciones")
campo = New DataColumn("Seleccionado", GetType(System.Boolean))
campo.DefaultValue = False
tabla.Columns.Add(campo)
campo = New DataColumn("Codigo", GetType(System.Int32))
tabla.Columns.Add(campo)
campo = New DataColumn("Descripcion", GetType(System.String))
campo.DefaultValue = ""
tabla.Columns.Add(campo)
For i = 0 To causas.Tables("Textos").Rows.Count - 1
registro = tabla.NewRow
registro("Seleccionado") = False
registro("Codigo") = CInt(causas.Tables("Textos").Rows(i)("Codigo"))
registro("Descripcion") = CStr(causas.Tables("Textos").Rows(i)("Descripcion"))
tabla.Rows.Add(registro)
Next
dtsPredefinidas.Tables.Add(tabla)
End Sub
Lo siguiente es escribir el código para crear las columnas. Usaremos un TemplateColumn para crear la columna en la especificaremos el chekbox:
Private Sub generaColumnasCausas()
Dim cTexto As BoundColumn
Dim tcol As New TemplateColumn
' Limpio las posibles columnas que tuvierra el DataGrid
dtgObservaciones.Columns.Clear()
tcol.HeaderText = "Selecciona"
tcol.ItemTemplate = New DynamicItemTemplate(True, "Seleccionado")
dtgObservaciones.Columns.Add(tcol)
' Código de observación
cTexto = New BoundColumn
cTexto.DataField = "Codigo"
cTexto.HeaderText = "Código"
cTexto.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
dtgObservaciones.Columns.Add(cTexto)
' Observación
cTexto = New BoundColumn
cTexto.DataField = "Descripcion"
cTexto.HeaderText = "Observaciones"
cTexto.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
dtgObservaciones.Columns.Add(cTexto)
End Sub ' generaColumnasCausas
Si queremos crear un botón en lugar de un chekbox, cambiamos las líneas:
Dim tcol As New TemplateColumn
tcol.HeaderText = "Selecciona"
tcol.ItemTemplate = New DynamicItemTemplate(True, "Seleccionado")
por la línea:
Dim cBoton As ButtonColumn
cBoton = New ButtonColumn
cBoton.ButtonType = ButtonColumnType.LinkButton
También se puede usar PushButton si queremos un botón y no un enlace.
Seguimos para bingo...
Los siguiente a tener en cuenta es que debemos asignar los datos que se van a mostrar al Datagrid y luego hay que refrescarlo para que se muestren:
Private Sub refrescaGridCausas()
Dim vista As DataView
If (orden = 0) Then
vista = New DataView(dtsPredefinidas.Tables("Observaciones"), "", "Descripcion", DataViewRowState.CurrentRows)
ElseIf (orden = 1) Then
vista = New DataView(dtsPredefinidas.Tables("Observaciones"), "", "Codigo", DataViewRowState.CurrentRows)
Else
vista = New DataView(dtsPredefinidas.Tables("Observaciones"), "", "Descripcion", DataViewRowState.CurrentRows)
End If
generaColumnasCausas()
Try
If Not dtsPredefinidas Is Nothing Then
dtgObservaciones.DataSource = vista
dtgObservaciones.DataBind()
End If
Catch ex As Exception
CMessageBox1.Mensaje = ex.Message
CMessageBox1.Tipo = False 'Si es False solo muestra Aceptar. Si es True muestra también el Cancelar
CMessageBox1.muestra() 'Muestra la ventana
End Try
End Sub ' refrescaGridCausas
Ya solo nos queda hacer la llamada para que se monte todo el tinglado en el orden necesario:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
montaCausas(dtsPredefinidas)
refrescaGridCausas
End Sub()
Aquí os muestro cómo acceder a los campos de un PDF y a sus datos y recuperarlos o modificarlos según sea necesario.
Para crear el PDF interactivo he utilizado Adobe LiveCycleDesigner 8.0 y para modificarlo desde código he usado la librería itextsharp-4.1.0-dll. Esta librería es gratuita y la podéis encontrar en el siguiente enlace:
asp.net |
Martes 21 de marzo de 2006 a las 02:37:08
Cuando pasamos un texto con un formato concreto a un campo de Crystal Reports, nos podemos encontrar con una sorpresa, y es la siguiente: pierde el formato. No hace los saltos de línea y deja todo el texto junto.
vb.net |
Martes 14 de marzo de 2006 a las 02:21:55
Han sido muchos los que me han preguntado como pueden imprimir un report creado con Crystal Reports en el que los datos van cambiando según los datos introducidos en un formulario o recuperados de una base de datos. Pues bien. Ha llegado la hora de colgarlo aquí para que podáis usarlo todos aquellos que lo necesitéis. Para cualquier aclaración sobre el tema no tenéis más que mandarme un correo.