Private Sub Form_Load()On Error GoTo avisoIf cn.State = 1 Then cn.Closeconectarse
cmd.ActiveConnection = cncmd.CommandType = adCmdTextcmd.CommandText = "select * from usuarios"'rs.Open "select * from usuarios", cn, adOpenKeyset, adLockOptimisticSet rs = cmd.Executers.Closers.CursorLocation = adUseClientrs.CursorType = adOpenStaticrs.LockType = adLockReadOnlyrs.Open'Set rs = cmd.ExecuteSet DataGrid1.DataSource = rstotal = rs.RecordCountLabel1.Caption = "Total " & total & " Usuarios "Call formato
DataGrid1.Col = 7 ' Suponemos columna del importe For I = 1 To DataGrid1.ApproxCount DataGrid1.Col = 7 DataGrid1.Row = I Valor = CCur(DataGrid1.Text) Total = Total + Valor Next I Text1 = Format(Total, "###,###,###.###.00") End Sub
1. Dim i As Long
2. For i = 0 To DataGrid1.ApproxCount - 1
3. MsgBox
DataGrid1.Columns(3).CellValue(DataGrid1.GetBookmark(i))
4. DoEvents
5. Next
go:
1. ' SI QUIERES SUMAR TODAS LAS FILAS
2. With Adodc1.Recordset
3. Do while not .Eof
4. Total = Total + !ImporteaSumar ' Donde
ImporteaSumar es el nombre del Campo
5. 'de tu tabla que conectaste con Adodc1 y se ve en DataGrid1
6. .Movenext
7. Loop
8. End With
9. 'Aqui tienes como sumar el Grid, como veras no hace falta usar el
Grid
10. 'para sumar, sino el Recordset. Este Recorset es el que contiene
los Datos
11. 'que ves en tu DataGrid
12. '---------------------------------------------------------------
------
13. 'Ahora si lo que quieres es SUMAR alguna filas seleccionadas en
el
14. 'DataGrid se procede primero a Seleccionar (haciendo click con
el mouse'
15. 'en el primer registro y luego control click en los registros
siguiente)
16. 'La suma se realiza en el orden elegido.Ej. si primero eliges el
registro 4, luego
17. 'el 82, luego el 40, luego el 22, etc... se suman en ese ORDEN y
para sumar
18. ' se utiliza el programa siguiente.
19.
20. For Each varbmk In DataGrid1.SelBookmarks
21. Adodc1.Recordset.Bookmark = varbmk
22. If IsNull(Adodc1.Recordset.Fields("ImporteaSumar"))
Then
23. TotalTransitorio = 0
24. Else
25. TotalTransitorio =
Adodc1.Recordset.Fields("ImporteaSumar")
26. End If
27. Total = Total +TotalTransitorio
28.
29. Next
acceder a la totalidad del registro en combo1.itemdata(combo1.listindex)Código:sub form_loadDim Rec as adodb.Recordset
Set Cn=new adodb.ConnectionCn.open " ... connectionstring ..."
Set Rec=new adodb.RecordsetRec.open "select codigo, ape1+" "+nombre as NombreTotal where poblacion='Madrid' order by ape1"
do while not rec.eof combo1.additem "" & rec!NombreTotal combo1.itemdata(combo1.newindex) = "" & rec!codigo rec.movenextloop
Diferencias conceptualesEnlace de datos
El control DataGridView de Visual Basic 2005 no requiere métodos ni eventos específicos de datos, ya que todas las acciones se realizan a través del origen de datos. Debido a esta separación de la presentación y la funcionalidad de los datos, el origen de datos se puede cambiar con o sin entrada de interfaz de usuario. Asimismo, múltiples controles enlazados al mismo origen de datos siempre permanecerán sincronizados.
Desplazamiento
Ya no son necesarias las propiedades para visualizar y desplazarse en el control DataGrid (como TabAction, EnterAction, AllowArrows, WrapCellPointer y Scrollable). Por ejemplo, la cuadrícula funciona como si la propiedad Scrollable se estableciese en True: si existen más datos que mostrar, aparece automáticamente una barra de desplazamiento. De manera predeterminada, los desplazamientos por la cuadrícula siguen el modelo de Excel, es decir, el usuario se puede desplazar hacia delante con la tecla TAB y hacia atrás con la combinación de teclas MAYÚS+TAB. Para obtener más información, vea Control predeterminado de teclado y mouse (ratón) en el control DataGridView de formularios Windows Forms.
Propiedad Caption
En Visual Basic 6.0 la propiedad Caption se utilizaba para mostrar una barra de título sobre la cuadrícula; si se dejaba vacía, no se mostraba ninguna barra de título.
El control DataGridView de Visual Basic 2005 no admite barra de título. Sin embargo, puede lograr el mismo efecto mediante un control Label.
Formato de datos
En Visual Basic 6.0, el formato de datos en el control DataGrid se controla utilizando la propiedad DataFormat y un objeto StdDataFormat. El formato se aplica columna por columna.
En el control DataGridView de Visual Basic 2005, el formato se realiza mediante la propiedad Format de un objeto DataGridViewCellStyle. El formato se puede aplicar a celdas, columnas o filas individuales. Para obtener más información, vea Formato de datos en el control DataGridView de formularios Windows Forms.
Propiedad hWndEditor
En Visual Basic 6.0, para pasar el identificador de ventana asignado a una ventana de edición del control DataGrid a una llamada a la API de Windows se utiliza la propiedad hWndEditor.
El control DataGridView de Visual Basic 2005 no tiene un identificador de la ventana independiente en modo de edición; en su lugar, utilice la propiedad Handle del control DataGridView o cualquier control de edición incrustado.
Propiedad MarqueeStyle
En Visual Basic 6.0, la propiedad MarqueeStyle controla el aspecto de una celda o fila seleccionada cambiando el estilo de borde, invirtiendo los colores de primer plano y de fondo o invocando una ventana de edición.
No existe ningún equivalente directo del control DataGridView en Visual Basic 2005. Sin embargo, puede lograr el mismo efecto utilizando una combinación de propiedades SelectionMode, CellBorderStyle y Format. Para obtener más información, vea Modos de selección en el control DataGridView de formularios Windows Forms.
Propiedades SelLength, SelStart, SelText
En el control DataGrid de Visual Basic 6.0, cuando una celda pasa al modo de edición se pueden utilizar las propiedades SelLength, SelStart y SelText para establecer la posición inicial del símbolo de intercalación o para resaltar una parte del texto en la celda.
En el control DataGridView de Visual Basic 2005 ya no existen estas propiedades. Las celdas del control DataGridView se basan en el control TextBox; si agrega código al controlador de eventos EditingControlShowing, se puede tener acceso a las propiedades SelectionLength, SelectionStart y SelectedText del control subyacente.
Dividir vistas
El control DataGrid de Visual Basic 6.0 admite la división de vistas, que permite al usuario mostrar los mismos datos uno al lado de otro. El objeto Split y las propiedades Split, Splits y TabAcrossSplits controlan esta capacidad de mostrar una vista dividida.
En el control DataGridView de Visual Basic 2005 ya no existen estas propiedades. Sin embargo, puede lograr el mismo efecto mediante uno o más controles SplitContainer y varios controles DataGridView. Para duplicar la funcionalidad de la propiedad TabAcrossSplits, puede utilizar la propiedad StandardTab del control DataGridView.
Cambios de código para el control DataGridEn el código siguiente se muestran las diferencias entre Visual Basic 6.0 y Visual Basic 2005 respecto al modo de resaltar texto de una celda cuando un usuario selecciona la celda en un control DataGridView.
' Visual Basic 6.0Private Sub DataGrid1_Click() DataGrid1.SelStart = 1
DataGrid1.SelLength = DataGrid1.Text MsgBox("The selected text is " & DataGrid1.SelText)End Sub
VB ' Visual Basic 2005Private Sub DataGridView1_EditingControlShowing( _ByVal sender As Object, ByVal e As System.Windows.Forms. _DataGridViewEditingControlShowingEventArgs) _Handles DataGridView1.EditingControlShowing CType(e.Control, TextBox).SelectionStart = 0 CType(e.Control, TextBox).SelectionLength = Len(CType(e.Control, _ TextBox).Text) MsgBox("The selected text is " & CType(e.Control, _ TextBox).SelectedText)End Sub
Equivalencias de propiedades, métodos y eventos del control DataGridEn las siguientes tablas se enumeran propiedades, métodos y eventos de Visual Basic 6.0 con sus equivalentes en Visual Basic 2005. No se enumeran aquellas propiedades, métodos y eventos que tienen el mismo nombre y el mismo comportamiento. Salvo que se indique lo contrario, todas las enumeraciones Visual Basic 2005 se asignan al espacio de nombres System.Windows.Forms.
Esta tabla proporciona vínculos a temas que explican las diferencias de comportamiento. Cuando no hay equivalente directo en Visual Basic 2005, se proporcionan vínculos a temas que presentan alternativas.
Propiedades
Visual Basic 6.0 Equivalente en Visual Basic 2005
AddNewMode
Nueva implementación. Las operaciones de datos se controlan en el origen de datos. Para obtener más información, vea Mostrar datos en el control DataGridView de formularios Windows Forms.
Align Dock y AnchorAllowAddNew AllowNew (BindingSource)
AllowArrows
Ya no es una propiedad que se pueda ajustar; siempre se permite el desplazamiento mediante flechas. Para obtener más información, vea Control predeterminado de teclado y mouse (ratón) en el control DataGridView de formularios Windows Forms.
AllowDelete AllowRemove (BindingSource)AllowRowSizing AllowUserToResizeRowsAllowUpdate AllowEdit (BindingSource)Appearance Nueva implementación. Para obtener más información, vea
Propiedades Appearance y BorderStyle para usuarios de Visual
Basic 6.0.
ApproxCount
Nueva implementación. Las operaciones de datos se controlan en el origen de datos. Para obtener más información, vea Mostrar datos en el control DataGridView de formularios Windows Forms.
BackColor
BackgroundColor
NotaLos colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Comportamiento del color para los usuarios de Visual Basic 6.0.
BookmarkNueva implementación. Ahora se puede obtener acceso directamente a cualquier elemento.
CaptionNueva implementación. Utilice un control Label para simular una barra de título.
Col SelectedColumnsColumnHeaders ColumnHeadersVisibleContainer Parent; se hereda de Control.CurrentCellModified IsCurrentCellDirty, IsCurrentCellInEditMode
CurrentCellVisible
CurrentCell
NotaSi la propiedad CurrentCell se establece en una celda que no es visible, la cuadrícula se desplazará para mostrarla (similar a establecer CurrentCellVisible en True).
DataChanged IsCurrentCellDirty, IsCurrentRowDirty
DataFormats
Objeto DataGridViewCellStyle.
NotaEl formato se puede establecer para una celda, columna o fila individuales.
DefColWidth Width Objeto DataGridViewColumn.DragIcon
DragMode
Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
EditActive IsCurrentCellInEditModeFirstRow FirstDisplayedScrollingRowIndexFont
FontBold
FontItalic
FontName
FontSize
Font
NotaLas fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Control de fuentes para usuarios de Visual Basic 6.0.
FontStrikethrough
FontUnderline
ForeColor
ForeColor
NotaLos colores se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Comportamiento del color para los usuarios de Visual Basic 6.0.
HeadFont
Objeto DataGridViewCellStyle.
NotaLas fuentes se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Objeto Font para usuarios de Visual Basic 6.0.
HeadLinesNo hay equivalente directo. Utilice la propiedad WrapMode del objeto DataGridViewCellStyle en combinación con la propiedad ColumnHeadersHeight.
Height
Height, heredada de la clase Control.
NotaLas coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Sistema de coordenadas para usuarios de Visual Basic 6.0.
HelpContextIDNueva implementación. Para obtener más información, vea Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
hWnd HandlehWndEditor Nueva implementación. Utilice Handle.
IndexNueva implementación. Para obtener más información, vea Matrices de controles para usuarios de Visual Basic 6.0.
Left
Left, heredada de la clase Control.
NotaLas coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Sistema de coordenadas para usuarios de Visual Basic 6.0.
LeftCol FirstDisplayedScrollingColumnIndex
MarqueeStyleNo hay equivalente directo. Utilice las propiedades SelectionMode, CellBorderStyle y Format.
RecordSelectors RowHeadersVisibleRow SelectedRows
RowDividerStylePropiedades GridColor, CellBorderStyle, RowHeadersBorderStyle, ColumnHeadersBorderStyle.
RowHeight Height
SelBookmarksNueva implementación. Ahora se puede obtener acceso directamente a cualquier elemento.
SelEndCol
SelStartColSelectedCells, SelectedColumns
SelLengthNo hay equivalente directo. Utilice la propiedad SelectionLength en el controlador de eventos EditingControlShowing.
SelStartNo hay equivalente directo. Utilice la propiedad SelectionStart en el controlador de eventos EditingControlShowing.
SelTextNo hay equivalente directo. Utilice la propiedad SelectedText en el controlador de eventos EditingControlShowing.
Split
Splits
TabAcrossSplits
Nueva implementación. No se admite la división de vistas directamente; utilice un control SplitContainer.
TabAction StandardTabTag Nueva implementación.
Text
CurrentCell.Value
NotaLa propiedad Value devuelve Object; utilice CStr o ToString para convertirlo en String.
ToolTipText
Componente ToolTip
Para obtener más información, vea Compatibilidad de la información sobre herramientas para usuarios de Visual Basic 6.0.
Top
Top
NotaLas coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Sistema de coordenadas para usuarios de Visual Basic 6.0.
VisibleCols
Método DisplayedColumnCount.
NotaEn Visual Basic 6.0, las columnas parcialmente visibles siempre se incluyen en el recuento; el método DisplayedColumnCount utiliza un parámetro booleano includePartialColumns para determinar si se incluyen las columnas parcialmente visibles.
VisibleRows
Método DisplayedRowCount.
NotaEn Visual Basic 6.0, las filas parcialmente visibles siempre se incluyen en el recuento; el método DisplayedRowCount utiliza un parámetro booleano includePartialRows para determinar si se incluyen las filas parcialmente visibles.
WhatsThisHelpIDNueva implementación. Para obtener más información, vea Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
Width Width, heredada de la clase Control.
NotaLas coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Sistema de coordenadas para usuarios de Visual Basic 6.0.
WrapCellPointerYa no es una propiedad que se pueda ajustar; el comportamiento predeterminado es WrapCellPointer = True.
Métodos
Visual Basic 6.0 Equivalente en Visual Basic 2005
CaptureImageNueva implementación. No se admite la captura del contenido de un control DataGridView a un control PictureBox.
ClearFieldsNueva implementación. Cuando se vuelve a enlazar, el formato de columna es automático.
ClearSelCols ClearSelectionColContaining IndexOf (DataGridViewColumnCollection)
DragNueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
GetBookmark Nueva implementación. Los marcadores ya no se admiten.
HoldFieldsNueva implementación. Se conserva el formato de la columna al enlazar.
Move
SetBounds, heredada de la clase Control.
NotaLas coordenadas se controlan de forma diferente en Visual Basic 2005. Para obtener más información, vea Sistema de coordenadas para usuarios de Visual Basic 6.0.
Rebind ResetBindings, heredada de la clase Control.RowBookmark Nueva implementación. Los marcadores ya no se admiten.RowContaining IndexOf (DataGridViewColumnCollection)RowTop GetContentBounds (DataGridViewCell)Scroll Nuevo método de implementación. Utilice la propiedad CurrentCell.SetFocus Focus
ShowWhatsThisNueva implementación. Para obtener más información, vea Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.
SplitContainingNueva implementación. No se admite la división de vistas directamente; utilice un control SplitContainer.
ZOrder Funciones BringToFront() o SendToBack()
Eventos
Visual Basic 6.0 Equivalente en Visual Basic 2005AfterColEdit CellEndEditAfterColUpdate Nueva implementación. Las operaciones de datos se controlan en el
origen de datos. Para obtener más información, vea Mostrar datos
AfterDeleteen el control DataGridView de formularios Windows Forms.
AfterUpdate RowsAddedBeforeColEdit CellBeginEditBeforeColUpdate
BeforeDelete
BeforeInsert
BeforeUpdate
Nueva implementación. Las operaciones de datos se controlan en el origen de datos. Para obtener más información, vea Mostrar datos en el control DataGridView de formularios Windows Forms.
ButtonClick Click (control Button)
Change
TextChanged
NotaEl comportamiento del evento TextChanged es ligeramente diferente. Para obtener más información, vea Evento de cambio de control ComboBox para usuarios de Visual Basic 6.0.
Click SelectedIndexChangedColEdit CellBeginEditColResize ColumnWidthChangedDblClick CellMouseDoubleClickDragDrop
DragOver
Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
Error DataErrorHeadClick ColumnHeaderMouseClickMouseDown CellMouseDownMouseMove CellMouseMoveMouseUp CellMouseUpOLECompleteDrag
OLEDragDrop
OLEDragOver
OLEGiveFeedback
OLESetData
OLEStartDrag
Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.
OnAddNew RowsAddedRowColChange CurrentCellChangedRowResize RowHeightChangedSelChange SelectionChanged
SplitChangeNueva implementación. No se admite la división de vistas directamente; utilice un control SplitContainer.
Validate Validating
Notas de la actualizaciónCuando un proyecto Visual Basic 6.0 se actualiza a Visual Basic 2005, el evento Change del control DataGrid se asigna al evento TextChanged del control DataGridView de Visual Basic 2005. El comportamiento del evento TextChanged difiere del comportamiento del evento Change; esta diferencia puede provocar resultados inesperados en el código.
No se actualiza ningún código relacionado con métodos o eventos específicos de datos. Se agregan comentarios de advertencia al código y se debe quitar o modificar el código antes de compilar la aplicación.
Vea tambiénReferencia
Información general del control DataGridView (Formularios Windows Forms)Comparación de los controles y objetos programables de distintos lenguajes y bibliotecas
Conceptos
Resumen de tecnologías para el control DataGridView (formularios Windows Forms)Lo nuevo en formularios Windows Forms y controles de formularios Windows Forms
Otros recursos
DataGridView (Control, formularios Windows Forms)Controles de formularios Windows Forms para usuarios de Visual Basic 6.0Enlace de datos en formularios Windows Forms
bueno segui investigando y encontre la manera de pasar los datos del datagriview a unas cajas de texto con el siguiente codigo:Código:
Dim Nombre As String = ProductosDataGridView.Rows(e.RowIndex).Cells(0).ValueDim Marca As String = ProductosDataGridView.Rows(e.RowIndex).Cells(1).Value Dim Categoria As String = ProductosDataGridView.Rows(e.RowIndex).Cells(2).ValueDim Precio As String = ProductosDataGridView.Rows(e.RowIndex).Cells(3).Value TextBox1.Text = Nombre TextBox2.Text = Marca TextBox3.Text = Categoria TextBox4.Text = Precio
Private Sub DataGrid1_DblClick()
gbl_usuario.Text1.Text = DataGrid1.Columns(0).Text gbl_usuario.Text2.Text = DataGrid1.Columns(1).Text gbl_usuario.Text3.Text = DataGrid1.Columns(3).Text gbl_usuario.Text3.Text = DataGrid1.Columns(2).Text
Unload Me gbl_usuario.Show
End Sub
Private Sub DataGrid1_Click() 'Text1.text = "" 'Text2.text = ""
Text1.text = DataGrid1.Columns(0).text Text2.text = DataGrid1.Columns(1).text Text3.text = DataGrid1.Columns(2).text Text4.text = DataGrid1.Columns(3).text Text5.text = DataGrid1.Columns(4).text Text6.text = DataGrid1.Columns(5).text Text7.text = DataGrid1.Columns(6).text Text8.text = DataGrid1.Columns(7).text Text9.text = DataGrid1.Columns(8).text Text10.text = DataGrid1.Columns(9).text End Sub
Respuesta: Pasar datos de un datagrid a otro
Aca dejo mi codigo del boton añadir:
dt = New DataTable("Detalle_Ingreso")Código = New DataColumn("Código")Descripción = New DataColumn("Descripción")Cantidad = New DataColumn("Cantidad")Código.DataType = System.Type.GetType("System.String")Descripción.DataType = System.Type.GetType("System.String")Cantidad.DataType = System.Type.GetType("System.String")Dim Row As DataRowTrydt.Columns.Add(Código)dt.Columns.Add(Descripción)dt.Columns.Add(Cantidad)Row = dt.NewRowRow.Item("Código") = Txt_codigoarticulo.TextRow.Item("Descripción") = Txt_articulo.TextRow.Item("Cantidad") = Txt_cantidad.Textdt.Rows.Add(Row)CatchEnd Tryds = New DataSetds.Tables.Add(dt)DGdetallearticulo.SetDataBinding(ds, "Detalle_Ingreso")DGdetallearticulo.Refresh()
talvez te sirva aguila, y se encuentras la solucion a mi problema, me dices.
Para realizar el ejemplo colocar en un formulario un control Datagrid llamado Datagrid1.
Luego desde el menú referencias marcar Activex Data Object para poder usar ADO
Crear una base de datos Access llamada bd1.mdb. Dentro de esta crear una tabla llamada Tabla1 con algunos campos y registros. La base de datos debe estar en la carpeta donde está el proyecto de vb.
Importante: Por defecto se exporta a un nuevo libro de Excel. Si se desea exportar a uno existente, colocar la ruta del libro en el parámetro Open del objeto Workbooks, por ejemplo
Set Obj_Libro = Obj_Excel.Workbooks.Open(La ruta )
Por último agregar un botón que será el que ejecuta la función llamada Exportar_DataGrid. A esta función se le debe enviar como parámetro el control Datagrid y un segundo parámetro que especifica la cantidad de filas a exportar. Por defecto se exportan todas las filas, indicando la propiedad AproxCount que devuelve dicho número.
Nota. Este ejemplo ha sido probado con Microsoft Access 2000 y Excel 2000.
Código fuente del formulario:
Texto plano Imprimir
1. ' ----------------------------------------------------------------------------------------- 2. ' \\ -- Descripción : Exportar DataGrid a Excel 3. ' \\ -- Controles : Un Datagrid, un CommandButton y la referencia a ADO 4. ' \\ -- Autor : Luciano Lodola -- http://www.recursosvisualbasic.com.ar/ 5. ' ----------------------------------------------------------------------------------------- 6. 7. ' -- Variables para la base de datos 8. Dim cnn As Connection 9. Dim rs As Recordset 10. ' -- Variables para Excel 11. Dim Obj_Excel As Object 12. Dim Obj_Libro As Object 13. Dim Obj_Hoja As Object 14. 15. ' ----------------------------------------------------------------------------------------- 16. ' \\ -- Sub para exportar 17. ' ----------------------------------------------------------------------------------------- 18. Private Sub exportar_Datagrid(Datagrid As Datagrid, n_Filas As Long) 19. 20. On Error GoTo Error_Handler 21. 22. Dim i As Integer 23. Dim j As Integer 24.
25. ' -- Colocar el cursor de espera mientras se exportan los datos 26. Me.MousePointer = vbHourglass 27. 28. If n_Filas = 0 Then 29. MsgBox "No hay datos para exportar a excel. Se ha indicado 0 en el parámetro Filas
": Exit Sub 30. Else 31. 32. ' -- Crear nueva instancia de Excel 33. Set Obj_Excel = CreateObject("Excel.Application") 34. ' -- Agregar nuevo libro 35. Set Obj_Libro = Obj_Excel.Workbooks.Open(Path) 36. 37. ' -- Referencia a la Hoja activa ( la que añade por defecto Excel ) 38. Set Obj_Hoja = Obj_Excel.ActiveSheet 39. 40. iCol = 0 41. ' -- Recorrer el Datagrid ( Las columnas ) 42. For i = 0 To Datagrid.Columns.Count - 1 43. If Datagrid.Columns(i).Visible Then 44. ' -- Incrementar índice de columna 45. iCol = iCol + 1 46. ' -- Obtener el caption de la columna 47. Obj_Hoja.Cells(1, iCol) = Datagrid.Columns(i).Caption 48. ' -- Recorrer las filas 49. For j = 0 To n_Filas - 1 50. ' -- Asignar el valor a la celda del Excel 51. Obj_Hoja.Cells(j + 2, iCol) = _ 52. Datagrid.Columns(i).CellValue(Datagrid.GetBookmark(j)) 53. Next 54. End If 55. Next 56. 57. ' -- Hacer excel visible 58. Obj_Excel.Visible = True 59. 60. ' -- Opcional : colocar en negrita y de color rojo los enbezados en la hoja 61. With Obj_Hoja 62. .Rows(1).Font.Bold = True 63. .Rows(1).Font.Color = vbRed 64. ' -- Autoajustar las cabeceras 65. .Columns("A:Z").AutoFit 66. End With 67. End If 68. 69. ' -- Eliminar las variables de objeto excel 70. Set Obj_Hoja = Nothing 71. Set Obj_Libro = Nothing 72. Set Obj_Excel = Nothing 73. 74. ' -- Restaurar cursor
75. Me.MousePointer = vbDefault 76. 77. Exit Sub 78. 79. ' -- Error 80. Error_Handler: 81. 82. MsgBox Err.Description, vbCritical 83. On Error Resume Next 84. 85. Set Obj_Hoja = Nothing 86. Set Obj_Libro = Nothing 87. Set Obj_Excel = Nothing 88. Me.MousePointer = vbDefault 89. 90. End Sub 91. 92. ' ------------------------------------------------------------------------------- 93. ' \\ -- Botón para Ejecutar la función que exporta los datos del datagrid a excel 94. ' ------------------------------------------------------------------------------- 95. Private Sub Command1_Click() 96. Call exportar_Datagrid(DataGrid1, DataGrid1.ApproxCount) 97. End Sub 98. ' ------------------------------------------------------------------------------- 99. ' \\ -- Inicio 100. ' ------------------------------------------------------------------------------- 101. Private Sub Form_Load() 102. 103. On Error GoTo Error_Handler 104. 105. ' -- Crear nueva conexión a la base de datos 106. Set cnn = New Connection 107. 108. ' -- Abrir la base de datos. 109. cnn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\
data\bd1.mdb" 110. 111. ' -- Crear nuevo objeto Recordset 112. Set rs = New Recordset 113. ' -- Configurar recordset 114. With rs 115. .CursorLocation = adUseClient 116. End With 117. ' -- Cargar el recordset ( ESPECIFICAR LA CONSULTA SQL ) 118. rs.Open "Select * From tabla1", cnn, adOpenStatic, adLockOptimistic 119. 120. ' -- Enlazar el datagrid con el recordset anterior 121. Set DataGrid1.DataSource = rs 122. 123. 124. Command1.Caption = " Exportar datagrid a Excel "
125. 126. ' -- Errores 127. Exit Sub 128. Error_Handler: 129. MsgBox Err.Description, vbCritical, "Error en Form Load" 130. End Sub 131. ' ------------------------------------------------------------------------------- 132. ' \\ -- Fin 133. ' ------------------------------------------------------------------------------- 134. Private Sub Form_Unload(Cancel As Integer) 135. 136. On Error Resume Next 137. ' -- Cerrar y eliminar recordset 138. If rs.State = adStateOpen Then rs.Close 139. If Not rs Is Nothing Then Set rs = Nothing 140. ' -- cerrar y Eliminar la conexión 141. If cnn.State = adStateOpen Then cnn.Close 142. Set cnn = Nothing
Dim nuevacol As ColumnSet nuevacol = grdDataGrid.Columns.Add( numcolumna)nuevacol.Caption = "Otra columna"nuevacol.Alignment = dbgRight
Este es el codigo para el boton agregar
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
If Me.TextBox1.Text <> String.Empty Then
If Me.ComboBox1.Text <> String.Empty Then
'agregamos la informacion a un row o fila del datagrid
Me.DataGridView1.Rows.Add(Me.TextBox1.Text,
Me.ComboBox1.Text, Me.DateTimePicker1.Value.ToShortDateString)
'limpiamos los controles
Me.TextBox1.Text = String.Empty
Me.ComboBox1.SelectedItem = String.Empty
Me.DateTimePicker1.Value = Today.Date
Else
MessageBox.Show("Ingrese un deporte", "",
MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
Else
MessageBox.Show("Ingrese un nombre", "",
MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
una vez tenemos datos dentro de nuestro datagrid, si deseamos eliminar uno de nuestros rows o filas damos click en el boton eliminar, la cual quitara la fila del datagrid.
Private Sub DataGridView1_CellContentClick(ByVal sender As
System.Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles
DataGridView1.CellContentClick
'se puede hacer referencia al nombre de la columna para saber
donde hicieron click o solo con el e.columnindex sabiendo la posicion de
la columna
'yo lo manejo asi por que se daran cuenta que en algun caso las
columnas pueden aumentar o disminuir
'y se complicaria la cosa por que si cambia el numero de
columnas habria que corregir siembre el indice
'si hicieron clic en la columna eliminar
If DataGridView1.Columns(e.ColumnIndex).Name = "Eliminar" Then
'eliminar row
DataGridView1.Rows.RemoveAt(e.RowIndex)
End If
End Sub
Ahora podremos guardar nuestra informacion al hacer click en el boton guardar, aqui se validara que existan datos o mejor filas en el datagrid, ahora recorreremos nuestro datagrid por medio de un For. tendremos una varia de tipo string (SqlString ) donde agregaremos la sentencia para guardar en la base de datos (INSERT INTO), ademas de un araylist para agregar las sentencias.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
If DataGridView1.Rows.Count > 0 Then
Dim SqlString As String = String.Empty ' variable a la que
asignaremos la sentencia
Dim ListSqlStrings As New ArrayList 'arregla donde
ingresaremos las sentencias
'recorremos el datagrid como ya sabemos siempre se toma
desde cero
For i As Integer = 0 To DataGridView1.Rows.Count - 1
'creamos la sentencia el row siempre tendra el valor de i para ir
pasando de row en row
'el campo .cells(0) indica la columna que esta ese dato,
tambien puede hacerlo con el nombre de la celda .cells("Nombre")
SqlString = "INSERT INTO datos
(nombre,deporte,fecha_inscripcion) VALUES ('" +
DataGridView1.Rows(i).Cells(0).Value.ToString() + "','" +
DataGridView1.Rows(i).Cells(1).Value.ToString() + "','" +
DataGridView1.Rows(i).Cells(2).Value.ToString() + "')"
'agregamos la sentencia a la lista
ListSqlStrings.Add(SqlString)
Next
If EjecutarTransaccion(ListSqlStrings) Then
MessageBox.Show("Info. guardada correctamente")
Close()
Else
MessageBox.Show("La Info. no se guardo")
End If
Else
MessageBox.Show("No hay informacion para guardar")
End If
End Sub
Ahora una vez hallamos recorrido el datagrid y tengamos nuestras sentencias, podremos ejecutar nuestra transaccion SQl para guardar en la base de datos. En este punto haciendo un parentesis igualmente podra ejecutar una a una las sentencias si lo desea por medio de un executenonquery, pero para mi lo mas optimo es una transaccion. Volviendo al evento guardar la funcion Public Function EjecutarTransaccion(ByVal ListaSentencias As ArrayList) As Boolean recibira el arraylist y retornara un valor booleano para identificar si se realizo la transaccion. para ejecutar nuestra transaccion necesitamos una conexion como la siguiente.
Public Connection1 As New SqlConnection("Data Source=XSaint;Initial
Catalog=DBPRUEBA;Integrated Security=SSPI")
Ahora la funcion ejecutartransaccion se ejecutara, si es correcta la transaccion retornara true de ser incorrecta podremos ver un mensaje y retornara un false
Public Function EjecutarTransaccion(ByVal ListaSentencias As ArrayList)
As Boolean
Dim band As Boolean = False
If AbrirConexion() Then
Dim command As SqlCommand = Connection1.CreateCommand()
Dim transaction As SqlTransaction
Dim strSentencia As Object
Dim sentencia As String = ""
transaction = Connection1.BeginTransaction()
command.Connection = Connection1
command.Transaction = transaction
Try
For Each strSentencia In ListaSentencias
sentencia = strSentencia.ToString()
command.CommandText = sentencia.ToString()
command.ExecuteNonQuery()
Next
transaction.Commit()
band = True
Catch ex As Exception
MessageBox.Show(ex.Message)
Try
transaction.Rollback()
Catch ex2 As Exception
MessageBox.Show(ex2.Message)
End Try
Finally
CerrarConexion()
End Try
End If
Return band
End Function
Si la transaccion es satisfactoria veremos un mensaje de satisfaccion. la clase transaccion utiliza dos funciones dicionales de abrir y cerrar conexion que nos permite establecer si la conexion es correcta o no.
Public Function AbrirConexion() As Boolean
Dim band As Boolean = False
Connection1.Open()
Try
band = True
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Return band
End Function
Public Function CerrarConexion() As Boolean
Dim band As Boolean = False
Connection1.Close()
Try
band = True
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Return band
End Function
Ejemplo 1
Ejemplo simple para recuperar el valor de la celda seleccionada de un control Datagrid
El valor de la celda se visualiza en el caption del formulario, consultando la propiedad Col , Text y Row del DataGrid
Se necesita colocar un DataGrid1
Código fuente en un formulario:
Texto plano Imprimir
1. Option Explicit 2. 3. 4. Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As I
nteger) 5. 'Muestra en el caption del fomulario _ 6. el valor de la celda seleccionada 7. Me.Caption = DataGrid1.Text & " Celda: " & CStr(DataGrid1.Row) & _ 8. " Columna: " & CStr(DataGrid1.Col) 9. End Sub 10. 11. Private Sub Form_Load() 12. Dim bd As String 13. 14. 15. 'Path de la base de datos 16. bd = App.Path & "\BIBLIO.MDB" 17. 18. 'Cadena de conexión 19. 20. Adodc1.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ 21. "Data Source=" & bd & ";" 22. 23. 'Cadena SQL 24. Adodc1.RecordSource = "SELECT * FROM Authors" 25. 26. 'Carga el Recordset en el datagrid 27. Set DataGrid1.DataSource = Adodc1 28. End Sub
Ejemplo 2
Ejemplo para obtener el valor de las celdas del Datagrid pero accediéndolas en un bucle anidado. Es decir en el bucle principal se recorren todas las filas, y en el otro las columnas. Dentro del ForNext que recorre las columnas, se obtiene el valor de la celda mediante la colección CellValue del objeto Columns del Grid.
Nota. El resultado se imprime y muestra en la ventana Inmediato del IDE de Visual basic.
Código fuente ( Agregar al Form un DataGrid, un botón y la referencia de ADO )
Texto plano Imprimir
1. Option Explicit 2. 3. ' \\ -- Recorrer datos de un DataGrid en un bucle 4. ' \\ -- Autor : Luciano Lodola -- www.recursosvisualbasic.com.ar 5. ' - ---------------------------------------------------------------------
----------- 6. 7. ' \\ -- Variables para la conexión 8. Private rs As ADODB.Recordset 9. Private cn As ADODB.Recordset 10. 11. ' -----------------------------------------------------------------------
-------- 12. ' \\ -- Botón que recorre el GRID 13. ' -----------------------------------------------------------------------
-------- 14. Private Sub Command1_Click() 15. 16. Dim i As Long ' -- Fila 17. Dim j As Long ' -- Columna 18. Dim sValue As String ' -- Valor de la celda 19. Dim sLine As String ' -- Valor de la linea ( La fila completa
) 20. 21. Screen.MousePointer = vbHourglass 22. 23. With DataGrid1 24. ' -- recorrer todas los registros del GRID 25. For i = 0 To .ApproxCount - 1 26. ' -- Recorrer las columnas 27. For j = 0 To .Columns.Count - 1 28. ' -- Obtener el valor de la celda actual
29. If Not IsNull(.Columns(j).CellValue(.GetBookmark(i))) Then
30. sValue = CStr(.Columns(j).CellValue(.GetBookmark(i)))
31. Else 32. sValue = "" 33. End If 34. ' -- Almacenar los datos de la fila 35. sLine = sLine & sValue & ";" 36. Next 37. ' -- Imprimir resultado 38. Debug.Print sLine 39. sValue = "" 40. sLine = "" 41. Next 42. End With 43. Screen.MousePointer = vbDefault 44. End Sub 45. ' -----------------------------------------------------------------------
-------- 46. ' \\ -- Inicio 47. ' -----------------------------------------------------------------------
-------- 48. Private Sub Form_Load() 49. Dim bd As String 50. 51. ' -- Ruta de la base de datos 52. bd = "C:\Archivos de programa\Microsoft Visual Studio\VB98\
BIBLIO.MDB" 53. 54. ' -- Crear conexión 55. Dim cn As New ADODB.Connection 56. Dim rs As New ADODB.Recordset 57. cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & bd & "
;" 58. 59. cn.CursorLocation = adUseClient 60. ' -- Ejecutar comando SQL ( seleccionar las primeras 100 filas ) 61. Set rs = cn.Execute("SELECT Top 150 * FROM Authors") 62. 63. ' -- Enlazar los datos al GRID 64. Set DataGrid1.DataSource = rs 65. End Sub 66. ' -----------------------------------------------------------------------
-------- 67. ' \\ -- Fin 68. ' -----------------------------------------------------------------------
-------- 69. Private Sub Form_Unload(Cancel As Integer) 70. ' -- Quitar conexión al Grid 71. Set DataGrid1.DataSource = Nothing 72. ' -- Descargar recordset 73. If Not rs Is Nothing Then 74. If rs.State = adStateOpen Then rs.Close 75. Set rs = Nothing 76. End If 77. ' -- Descargar conexión 78. If Not cn Is Nothing Then 79. If cn.State = adStateOpen Then cn.Close 80. Set cn = Nothing 81. End If 82. End Sub
Ejemplo de la ayuda de visual basic, que muestra como usar el evento ButtonClick del control datagrid, para desplegar un Datalist como un combo desplegable y poder seleccionar un valor para la celda
En el proyecto, lo que se hace es ocultar el Datalist y hacerlo visible cuando se presiona el botón desplegable del la grilla
Para poder habilitar el botón en la columna , en este caso el campo con índice 1, se ejecuta la siguiente línea :
DataGrid1.Columns(1).Button = True
Cuando se produce el evento ButtonClick, se redimensiona y posiciona el DataList para desplegarlo en la celda actual
Nota . En el código se hace referencia a la bd nwind.mdb
Descargar
1. Option Explicit 2. 3. ' variables 4. Dim cn As ADODB.Connection 5. Dim rs As ADODB.Recordset 6. 7. 8. ' BeforeColUpdate : Validar antes de Actualizar los datos de la columna 1
y columna 2 9. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 10. Private Sub DataGrid1_BeforeColUpdate( _ 11. ByVal ColIndex As Integer, _
12. OldValue As Variant, _ 13. Cancel As Integer) 14. 15. ' Verifica si en la columna 1 ( Nombre de la compañia) _ 16. o la columna 2 Nombre del cont. , la cantidad de caracteres es _ 17. mayor a 6, si no cancela la atualización 18. If ColIndex = 0 Or ColIndex = 1 Then 19. With DataGrid1 20. ' Len((.Columns(xx).Value) .. contiene el valor de la celda 21. If Len((.Columns(0).Value) < 6) Or Len((.Columns(1).Value < 6)) T
hen 22. Cancel = True ' cancela 23. MsgBox "Los datos deben contener al menos 6 caracterers." & _ 24. "No se actualizarán los cambios", vbExclamation 25. 26. End If 27. End With 28. End If 29. End Sub 30. 31. Private Sub Form_Load() 32. 33. 'Nueva conexión ado 34. Set cn = New ADODB.Connection 35. 36. ' propiedades 37. With cn 38. .CursorLocation = adUseClient 39. .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _ 40. "Source=C:\Archivos de programa\Microsoft" &
_ 41. " Visual Studio\VB98\NWIND.MDB;Persist Securi
ty " & _ 42. "Info=False" 43. .Open ' abre la conexión 44. End With 45. 46. ' Abre el Recordset 47. 48. Set rs = New ADODB.Recordset 49. 50. rs.Open "SELECT [NombreCompañía],[NombreContacto],[CargoContacto] " &
_ 51. " FROM Proveedores", cn, adOpenStatic, adLockOptimistic 52. 53. 'llenar el datagrid 54. Set DataGrid1.DataSource = rs 55. 56. End Sub
Ejemplo 1
Formulario para buscar en un DataGrid mediante un TextBox y Commandbuttons.
El ejemplo para buscar , utiliza el método Find del recordset. Para buscar en el DataGrid, se debe indicar que campo se va a tener en cuenta para la busqueda. Dichos campos se añaden en un control Combobox
Nota: asi como está hecho el ejemplo, solo se puede buscar y especificar un campo que sea de tipo string, si no dará error en el método Find, por ejemplo si se busca en un campo de tipo Numérico
También hay un CheckBox para indicar de que forma buscar, es decir buscar el registro teniendo en cuanta la palabra completa, o parte de la cadena
Formulario
Código fuente en el formulario
Texto plano Imprimir
1. Option Explicit 2. 3. '************************************************************************
*********** 4. ' Ejemplo para buscar en un DataGrid con el método Find del recordset 5. 6. 'Controles : 1 - La referencia a Ado _ 7. 2 - Un control DataGrid ( DataGRid1 ) _ 8. 3 - Un control Textbox (Text1) _ 9. 4 - Dos CommandButon ( Command1 y Command2 ) _ 10. 5 - Un Combobox ( Combo1 - Para los campos ) _ 11. 6 - Un CheckBox _ 12. 7 - Indicar en la constante s_CONNECTION_STRING la _ 13. cadena de conexión para la base de datos _ 14. 8 - Indicar en el FormLoad, la consulta Sql para el recordse
t 15. 16. 17. 18. '************************************************************************
***********
19. 20. '************************************************************************
*********** 21. 22. ' ConnectionString 23. Private Const s_CONNECTION_STRING As String = "Provider=Microsoft.Jet.OLE
DB.4.0;" & _ 24. "Data Source=C:\Archivos de
programa" & _ 25. "\Microsoft Visual Studio\
VB98\" & _ 26. "NWIND.MDB;Persist Security
Info=False" 27. 28. ' Colores de fondo para los textbox mientras se busca 29. Private Const COLOR_TEXTBOX_NO_FOUND As Long = &H8080FF 30. Private Const COLOR_TEXTBOX_FOUND As Long = &HC0FFFF 31. Private Const COLOR_TEXTBOX_NORMAL As Long = vbWhite 32. '************************************************************************
*********** 33. 34. 35. ' Variable de tipo Recordset y con evento 36. Private WithEvents Recordset As ADODB.Recordset 37. 'Botón para buscar hacia atrás 38. Private Sub Command1_Click() 39. 40. ' Si llega al final posiciona el recordset en el último registro 41. If Recordset.EOF Then 42. Recordset.MoveLast 43. End If 44. ' Habilita y deshabilita los command de buscar 45. If Recordset.BOF Or Recordset.AbsolutePosition <= 1 Then 46. Command1.Enabled = False 47. Command2.Enabled = True 48. Command2.SetFocus 49. Exit Sub 50. End If 51. 52. Dim Anterior As Long 53. ' guarda la posición del Registro anterior 54. Anterior = Recordset.AbsolutePosition 55. ' Mueve el cursor 56. Recordset.Move 0, Recordset.Bookmark - 1 57. 58. ' Busca en cualquier parte de la cadena 59. If Check1.Value = 0 Then 60. Recordset.Find Combo1.Text & " LIKE '*" + Text1.Text + "*'", , ad
SearchBackward 61. ' Busca la cadena completa 62. ElseIf Check1.Value = 1 Then 63. Recordset.Find Combo1.Text & "='" + Text1.Text + "'", , adSearchB
ackward 64. End If 65. 66. Command2.Enabled = True 67. ' Si llega al principio , selecciona la última fila encontrada 68. If Recordset.BOF Then 69. Recordset.AbsolutePosition = Anterior 70. Command1.Enabled = False 71. Command2.SetFocus 72. End If 73. 74. End Sub 75. 'Botón para buscar hacia adelante 76. Private Sub Command2_Click()
77. ' Si llega al principio posiciona el recordset en el primer registro 78. If Recordset.BOF Then 79. Recordset.MoveFirst 80. End If 81. ' Habilita y deshabilita los botones para buscar 82. If Recordset.EOF Or Recordset.AbsolutePosition >= Recordset.RecordCou
nt Then 83. Command2.Enabled = False 84. Command1.Enabled = True 85. Command1.SetFocus 86. Exit Sub 87. End If 88. 89. Dim Anterior As Long 90. ' Almacena la fila actual 91. Anterior = Recordset.AbsolutePosition 92. ' Mueve un registro hacia atrás 93. Recordset.Move 0, Recordset.Bookmark + 1 94. 95. ' Busca en cualquier parte de la cadena 96. If Check1.Value = 0 Then 97. Recordset.Find Combo1.Text & " LIKE '*" + Text1.Text + "*'", , ad
SearchForward 98. ' Busca la cadena completa 99. ElseIf Check1.Value = 1 Then 100. Recordset.Find Combo1.Text & "='" + Text1.Text + "'", , adS
earchForward 101. End If 102. 103. Command1.Enabled = True 104. 105. If Recordset.EOF Then 106. Command2.Enabled = False 107. Command1.SetFocus 108. Recordset.AbsolutePosition = Anterior 109. End If 110. 111. End Sub 112. 113. 114. Private Sub Form_Load() 115. 116. ' Variable para la conexión de Ado 117. Dim db As ADODB.Connection 118. 119. ' Nuevo objeto Connection 120. Set db = New ADODB.Connection 121. 122. db.CursorLocation = adUseClient 123. 124. ' Abre la base de datos pasando la cadena de conexión 125. db.Open s_CONNECTION_STRING 126. 127. ' crea un Recordset 128. Set Recordset = New Recordset 129. 130. ' Abre el Recordset con la consulta Sql 131. Recordset.Open "Select [NombreContacto]," & _ 132. "[NombreCompañía]," & _ 133. "[CargoContacto] " & _ 134. "From Proveedores Order By NombreContacto
Asc", _ 135. db, adOpenStatic, adLockOptimistic 136. 137. Dim i As Integer 138.
139. 'Recorre los campos del recordset para añadirlos al combobox 140. 'Nota: los campos deben ser de tipo String 141. For i = 0 To Recordset.Fields.Count - 1 142. Combo1.AddItem Recordset.Fields.Item(i).Name 143. Next i 144. 145. ' Selecciona el campo 1 146. Combo1.ListIndex = 0 147. 148. 149. ' Engancha el recordset al datagrid 150. Set DataGrid1.DataSource = Recordset 151. 152. ' Opcional . esto hace que se seleccione la fila completa en el
DataGrid 153. DataGrid1.MarqueeStyle = dbgHighlightRowRaiseCell 154. 155. Text1 = "" 156. 'caption de los controles 157. Command1.Caption = "Quitar Filtro" 158. Command1.Caption = " << Buscar Anterior " 159. Command2.Caption = " Buscar Siguiente >> " 160. Check1.Caption = " Buscar palabra completa" 161. 162. End Sub 163. 164. 165. Private Sub Text1_Change() 166. 167. If Text1 <> "" Then 168. 169. ' Habilita los botones para buscar hacia atrás y hacia adel
ante 170. Command1.Enabled = True 171. Command2.Enabled = True 172. 173. Dim Actual As Long 174. ' almacena la fila actual, por si no so se encontró vuelve
a posicionar _ 175. el recordset en dicha fila 176. If Not Recordset.EOF And Not Recordset.BOF Then 177. Actual = Recordset.AbsolutePosition 178. End If 179. 180. ' Busca en cualquier parte de la cadena 181. If Check1.Value = 0 Then 182. Recordset.Find Combo1.Text & " LIKE '*" & Text1.Text &
"*'", , adSearchForward 183. ' Busca la Cadena completa 184. ElseIf Check1.Value = 1 Then 185. Recordset.Find Combo1.Text & "='" & Text1.Text & "'", ,
adSearchForward 186. End If 187. 188. ' Color del fondo del textbox 189. If Not Recordset.EOF And Not Recordset.BOF Then 190. Text1.BackColor = COLOR_TEXTBOX_FOUND 191. Else 192. Text1.BackColor = COLOR_TEXTBOX_NO_FOUND 193. End If 194. 195. If Recordset.BOF Or Recordset.EOF Then 196. Recordset.AbsolutePosition = Actual 197. End If 198. ' Si el textbox está vacío, posiciona el recordset en el primer
registro
199. Else 200. 201. Command1.Enabled = False 202. Command2.Enabled = False 203. 204. Recordset.MoveFirst 205. 206. Set DataGrid1.DataSource = Recordset 207. ' Color de fondo del textbox cuando está vacío 208. Text1.BackColor = COLOR_TEXTBOX_NORMAL 209. 210. End If 211. 212. End Sub 213. 214. ' Evento que se dispara cuando se cambia de posición en el recordse
t 215. Private Sub Recordset_MoveComplete(ByVal adReason As ADODB.EventRea
sonEnum, _ 216. ByVal pError As ADODB.Error, adStat
us As ADODB.EventStatusEnum, _ 217. ByVal pRecordset As ADODB.Recordset
) 218. 219. ' Muestra en el caption del formulario el número registro actual 220. Me.Caption = " Registro actual: " & CSt
r(Recordset.AbsolutePosition) 221. 222. End Sub 223. 224. ' Cuando se produce un error en el recordset se dispara este evento
225. Private Sub Recordset_Error(ByVal ErrorNumber As Long, Description
As String, _ 226. ByVal Scode As Long, ByVal Source As Strin
g, _ 227. ByVal HelpFile As String, ByVal HelpContex
t As Long, _ 228. fCancelDisplay As Boolean) 229. ' Mostramos el error 230. MsgBox " Descripción del Error :" & Description, vbCritical 231. End Sub 232. 233. ' Cierra el recordset y Descarga la referencia 234. Private Sub Form_Unload(Cancel As Integer) 235. 236. ' Cierra 237. If Recordset.State = adStateOpen Then 238. Recordset.Close 239. End If 240. 241. ' descarga 242. If Not Recordset Is Nothing Then 243. Set Recordset = Nothing 244. End If 245. End Sub
Ejemplo 2
Otro ejemplo ( de la ayuda de vb )
Este código fuente de ejemplo es mas simple que el anterior, y está sacado de la ayuda de visual basic.
El formulario , usa ado y un control datagrid.
El DataGrid se conecta a la base de datos Biblio.mdb para cargar los registros de la tabla Authors en la grilla.
Al presionar un commandbutton, se pide mediante un inputbox, que se ingrese un valor para el nombre del campo "author" a buscar con el método Find .
Descargar proyecto y artículo original
1. Dim Recordset As Recordset 2. 3. '***************************************************************************
4. '* Name : Seleccionar la fila completa en un control DataGrid _
5. Agregar la referencia a Ado y un control Datagrid llamado Datagrid1 6. '*************************************************************************** 7. 8. Private Sub Form_Load() 9. Dim db As Connection 10. 11. ' Nueva conexión Ado 12. Set db = New Connection 13. 14. db.CursorLocation = adUseClient 15. 16. ' Base de datos de visual basic NWIND 17. db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=" & _ 18. "C:\Archivos de programa\Microsoft Visual Studio\" & _ 19. "VB98\NWIND.MDB;" 20. 21. ' Crea un nuevo recordset 22. Set Recordset = New Recordset 23. 24. ' Lo abre 25. Recordset.Open "select IdCategoría,NombreCategoría,Descripción from Cat
egorías", _ 26. db, adOpenStatic, adLockO
ptimistic 27. 28. ' Asigna el recordset al DataGrid 29. Set DataGrid1.DataSource = Recordset 30. 31. ' Esta propiedad es la que selecciona _ 32. toda la fila del dataGrid usando la propiedad MarqueeStyle 33. DataGrid1.MarqueeStyle = dbgHighlightRowRaiseCell 34. 35. 36. End Sub 37. 38. Private Sub Form_Resize() 39. On Error Resume Next
40. ' Redimensiona el datagrid 41. DataGrid1.Height = Me.ScaleHeight - 300 42. DataGrid1.Width = Me.ScaleWidth 43. DataGrid1.Left = 0 44. DataGrid1.Top = 0 45. End Sub 46. 47. Private Sub Form_Unload(Cancel As Integer) 48. 49. ' Cierra el recordset 50. If Not Recordset.State = adStateOpen Then 51. Recordset.Close 52. End If 53. 54. ' Elimina la referencia 55. If Not Recordset Is Nothing Then 56. Set Recordset = Nothing 57. End If 58. End Sub
Formulario con el Datagrid a exportar
Para realizar el ejemplo colocar en un formulario un control Datagrid llamado Datagrid1.
Luego desde el menú referencias marcar Activex Data Object para poder usar ADO
Crear una base de datos Access llamada bd1.mdb. Dentro de esta crear una tabla llamada Tabla1 con algunos campos y registros. La base de datos debe estar en la carpeta donde está el proyecto de vb.
Importante: Por defecto se exporta a un nuevo libro de Excel. Si se desea exportar a uno existente, colocar la ruta del libro en el parámetro Open del objeto Workbooks, por ejemplo
Set Obj_Libro = Obj_Excel.Workbooks.Open(La ruta )
Por último agregar un botón que será el que ejecuta la función llamada Exportar_DataGrid. A esta función se le debe enviar como parámetro el control Datagrid y un segundo parámetro que especifica la cantidad de filas a exportar. Por defecto se exportan todas las filas, indicando la propiedad AproxCount que devuelve dicho número.
Nota. Este ejemplo ha sido probado con Microsoft Access 2000 y Excel 2000.
Código fuente del formulario:
Texto plano Imprimir
1. ' -----------------------------------------------------------------------------------------
2. ' \\ -- Descripción : Exportar DataGrid a Excel 3. ' \\ -- Controles : Un Datagrid, un CommandButton y la referenci
a a ADO 4. ' \\ -- Autor : Luciano Lodola -- http://
www.recursosvisualbasic.com.ar/ 5. ' -----------------------------------------------------------------------
------------------ 6. 7. ' -- Variables para la base de datos 8. Dim cnn As Connection 9. Dim rs As Recordset 10. ' -- Variables para Excel 11. Dim Obj_Excel As Object 12. Dim Obj_Libro As Object 13. Dim Obj_Hoja As Object 14. 15. ' -----------------------------------------------------------------------
------------------ 16. ' \\ -- Sub para exportar 17. ' -----------------------------------------------------------------------
------------------ 18. Private Sub exportar_Datagrid(Datagrid As Datagrid, n_Filas As Long) 19. 20. On Error GoTo Error_Handler 21. 22. Dim i As Integer 23. Dim j As Integer 24. 25. ' -- Colocar el cursor de espera mientras se exportan los datos 26. Me.MousePointer = vbHourglass 27. 28. If n_Filas = 0 Then 29. MsgBox "No hay datos para exportar a excel. Se ha indicado 0 en e
l parámetro Filas ": Exit Sub 30. Else 31. 32. ' -- Crear nueva instancia de Excel 33. Set Obj_Excel = CreateObject("Excel.Application") 34. ' -- Agregar nuevo libro 35. Set Obj_Libro = Obj_Excel.Workbooks.Open(Path) 36. 37. ' -- Referencia a la Hoja activa ( la que añade por defecto Excel
) 38. Set Obj_Hoja = Obj_Excel.ActiveSheet 39. 40. iCol = 0 41. ' -- Recorrer el Datagrid ( Las columnas ) 42. For i = 0 To Datagrid.Columns.Count - 1 43. If Datagrid.Columns(i).Visible Then 44. ' -- Incrementar índice de columna
45. iCol = iCol + 1 46. ' -- Obtener el caption de la columna 47. Obj_Hoja.Cells(1, iCol) = Datagrid.Columns(i).Caption 48. ' -- Recorrer las filas 49. For j = 0 To n_Filas - 1 50. ' -- Asignar el valor a la celda del Excel 51. Obj_Hoja.Cells(j + 2, iCol) = _ 52. Datagrid.Columns(i).CellValue(Datagrid.GetBookmark(j)
) 53. Next 54. End If 55. Next 56. 57. ' -- Hacer excel visible 58. Obj_Excel.Visible = True 59. 60. ' -- Opcional : colocar en negrita y de color rojo los enbezados
en la hoja 61. With Obj_Hoja 62. .Rows(1).Font.Bold = True 63. .Rows(1).Font.Color = vbRed 64. ' -- Autoajustar las cabeceras 65. .Columns("A:Z").AutoFit 66. End With 67. End If 68. 69. ' -- Eliminar las variables de objeto excel 70. Set Obj_Hoja = Nothing 71. Set Obj_Libro = Nothing 72. Set Obj_Excel = Nothing 73. 74. ' -- Restaurar cursor 75. Me.MousePointer = vbDefault 76. 77. Exit Sub 78. 79. ' -- Error 80. Error_Handler: 81. 82. MsgBox Err.Description, vbCritical 83. On Error Resume Next 84. 85. Set Obj_Hoja = Nothing 86. Set Obj_Libro = Nothing 87. Set Obj_Excel = Nothing 88. Me.MousePointer = vbDefault 89. 90. End Sub 91. 92. ' -----------------------------------------------------------------------
-------- 93. ' \\ -- Botón para Ejecutar la función que exporta los datos del datagrid
a excel 94. ' -----------------------------------------------------------------------
-------- 95. Private Sub Command1_Click() 96. Call exportar_Datagrid(DataGrid1, DataGrid1.ApproxCount) 97. End Sub 98. ' -----------------------------------------------------------------------
-------- 99. ' \\ -- Inicio 100. ' -----------------------------------------------------------------
-------------- 101. Private Sub Form_Load() 102. 103. On Error GoTo Error_Handler
104. 105. ' -- Crear nueva conexión a la base de datos 106. Set cnn = New Connection 107. 108. ' -- Abrir la base de datos. 109. cnn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.
Path & "\data\bd1.mdb" 110. 111. ' -- Crear nuevo objeto Recordset 112. Set rs = New Recordset 113. ' -- Configurar recordset 114. With rs 115. .CursorLocation = adUseClient 116. End With 117. ' -- Cargar el recordset ( ESPECIFICAR LA CONSULTA SQL ) 118. rs.Open "Select * From tabla1", cnn, adOpenStatic, adLockOptimi
stic 119. 120. ' -- Enlazar el datagrid con el recordset anterior 121. Set DataGrid1.DataSource = rs 122. 123. 124. Command1.Caption = " Exportar datagrid a Excel " 125. 126. ' -- Errores 127. Exit Sub 128. Error_Handler: 129. MsgBox Err.Description, vbCritical, "Error en Form Load" 130. End Sub 131. ' -----------------------------------------------------------------
-------------- 132. ' \\ -- Fin 133. ' -----------------------------------------------------------------
-------------- 134. Private Sub Form_Unload(Cancel As Integer) 135. 136. On Error Resume Next 137. ' -- Cerrar y eliminar recordset 138. If rs.State = adStateOpen Then rs.Close 139. If Not rs Is Nothing Then Set rs = Nothing 140. ' -- cerrar y Eliminar la conexión 141. If cnn.State = adStateOpen Then cnn.Close 142. Set cnn = Nothing 143. End Sub
Nombre
Descripción
AutoSizeMode Obtiene o establece el modo mediante el cual la columna ajusta automáticamente su tamaño. (Se hereda de DataGridViewColumn).
CellTemplate Reemplazado. Obtiene o establece la plantilla utilizada para crear las nuevas celdas.
CellType Obtiene el tipo en tiempo de ejecución de la plantilla de celda. (Se hereda deDataGridViewColumn).
ContextMenuStrip Obtiene o establece el menú contextual para la columna. (Se hereda de DataGridViewColumn).
DataGridView Obtiene el control DataGridView asociado a este elemento. (Se hereda de DataGridViewElement).
DataPropertyName Obtiene o establece el nombre de la columna de base de datos o la propiedad del origen de datos a la que se enlaza DataGridViewColumn. (Se hereda de DataGridViewColumn).
DefaultCellStyle Reemplazado. Obtiene o establece el estilo predeterminado de celda de la columna.
DefaultHeaderCellType Obtiene o establece el tipo de la celda de encabezado predeterminada en tiempo de ejecución. (Se hereda de DataGridViewBand).
Displayed Obtiene un valor que indica si la banda se muestra actualmente en la pantalla. (Se hereda deDataGridViewBand).
DisplayIndex Obtiene o establece el orden de presentación de la columna respecto de las columnas actualmente mostradas. (Se hereda de DataGridViewColumn).
DividerWidth Obtiene o establece el ancho, en píxeles, del divisor de columna. (Se hereda deDataGridViewColumn).
FalseValue Obtiene o establece el valor subyacente que corresponde a un valor de celda de false, que aparece como una casilla de verificación desactivada.
FillWeight Obtiene o establece un valor que representa el ancho de la columna cuando se encuentra en modo de relleno, respecto del ancho de las demás columnas del control que estén en modo de relleno. (Se hereda de DataGridViewColumn).
FlatStyle Obtiene o establece la apariencia de estilo plano de las celdas de casilla de verificación.
Frozen Obtiene o establece un valor que indica si la columna se va a mover cuando el usuario se desplace horizontalmente por el control DataGridView. (Se hereda de DataGridViewColumn).
HasDefaultCellStyle Obtiene un valor que indica si la propiedad DefaultCellStyle se ha establecido.
(Se hereda deDataGridViewBand).
HeaderCell Obtiene o establece el objeto DataGridViewColumnHeaderCell que representa el encabezado de columna. (Se hereda de DataGridViewColumn).
HeaderText Obtiene o establece el texto de título en la celda de encabezado de columna. (Se hereda deDataGridViewColumn).
IndeterminateValue Obtiene o establece el valor subyacente que corresponde a un valor de celda indeterminado o referencia null (Nothing en Visual Basic), que aparece como una casilla de verificación desactivada.
Index Obtiene la posición relativa de la banda dentro del control DataGridView. (Se hereda deDataGridViewBand).
InheritedAutoSizeMode
Obtiene el modo de ajuste de tamaño en vigor para la columna. (Se hereda deDataGridViewColumn).
InheritedStyle Obtiene el estilo de celda aplicado actualmente a la columna. (Se hereda de DataGridViewColumn).
IsDataBound Obtiene un valor que indica si la columna está enlazada a un origen de datos. (Se hereda deDataGridViewColumn).
MinimumWidth Obtiene o establece el ancho mínimo, en píxeles, de la columna. (Se hereda
deDataGridViewColumn).
Name Obtiene o establece el nombre de la columna. (Se hereda de DataGridViewColumn).
ReadOnly Obtiene o establece un valor que indica si el usuario puede editar las celdas de la columna. (Se hereda de DataGridViewColumn).
Resizable Obtiene o establece un valor que indica si se puede cambiar el tamaño de la columna. (Se hereda de DataGridViewColumn).
Selected Obtiene o establece un valor que indica si la banda está en un estado seleccionado de la interfaz de usuario (UI). (Se hereda de DataGridViewBand).
Site Obtiene o establece el sitio de la columna. (Se hereda de DataGridViewColumn).
SortMode Obtiene o establece el modo de ordenación de la columna. (Se hereda de DataGridViewColumn).
State Obtiene el estado de la interfaz de usuario del elemento. (Se hereda de DataGridViewElement).
Tag Obtiene o establece el objeto que contiene datos para asociar a la banda. (Se hereda deDataGridViewBand).
ThreeState Obtiene o establece un valor que indica si las
celdas de casilla de verificación alojadas permitirán tener tres estados de verificación en lugar de dos.
ToolTipText Obtiene o establece el texto que se utiliza como información sobre herramientas. (Se hereda deDataGridViewColumn).
TrueValue Obtiene o establece el valor subyacente que corresponde a un valor de celda de true, que aparece como una casilla de verificación activada.
ValueType Obtiene o establece el tipo de datos de los valores de las celdas de la columna. (Se hereda deDataGridViewColumn).
Visible Obtiene o establece un valor que indica si la columna es visible. (Se hereda deDataGridViewColumn).
Width Obtiene o establece el ancho actual de la columna. (Se hereda de DataGridViewColumn).
Arriba
Propiedades protegidas
Nombre Descripción
HeaderCellCore
Obtiene o establece la celda de encabezado de DataGridViewBand. (Se hereda deDataGridViewBand).
IsRow Obtiene un valor que indica si la banda representa una fila. (Se
Top Related