Top Banner
Private Sub Form_Load() On Error GoTo aviso If cn.State = 1 Then cn.Close conectarse cmd.ActiveConnection = cn cmd.CommandType = adCmdText cmd.CommandText = "select * from usuarios" 'rs.Open "select * from usuarios", cn, adOpenKeyset, adLockOptimistic Set rs = cmd.Execute rs.Close rs.CursorLocation = adUseClient rs.CursorType = adOpenStatic rs.LockType = adLockReadOnly rs.Open 'Set rs = cmd.Execute Set DataGrid1.DataSource = rs total = rs.RecordCount Label1.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
54
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Private Sub Form

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

Page 2: Private Sub Form

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

Page 3: Private Sub Form

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

Page 4: Private Sub Form

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.

Page 5: Private Sub Form

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

Page 6: Private Sub Form

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

Page 7: Private Sub Form

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.

Page 8: Private Sub Form

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.

Page 9: Private Sub Form

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.

Page 10: Private Sub Form

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

Page 11: Private Sub Form

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.

Page 12: Private Sub Form

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

Page 13: Private Sub Form

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

Page 14: Private Sub Form

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.

Page 15: Private Sub Form

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.

Page 16: Private Sub Form

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

Page 17: Private Sub Form

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 "

Page 18: Private Sub Form

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

Page 19: Private Sub Form

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

Page 20: Private Sub Form

'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

Page 21: Private Sub Form

'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")

Page 22: Private Sub Form

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()

Page 23: Private Sub Form

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

Page 24: Private Sub Form

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

Page 25: Private Sub Form

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.

Page 26: Private Sub Form

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  

Page 27: Private Sub Form

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

Page 28: Private Sub Form

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, _  

Page 29: Private Sub Form

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

Page 30: Private Sub Form

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. '************************************************************************

***********  

Page 31: Private Sub Form

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()  

Page 32: Private Sub Form

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.       

Page 33: Private Sub Form

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  

Page 34: Private Sub Form

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

Page 35: Private Sub Form

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  

Page 36: Private Sub Form

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 )

Page 37: Private Sub Form

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  

Page 38: Private Sub Form

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  

Page 39: Private Sub Form

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  

Page 40: Private Sub Form

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).

Page 41: Private Sub Form

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.

Page 42: Private Sub Form

(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

Page 43: Private Sub Form

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

Page 44: Private Sub Form

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