Issuu on Google+

EN ESTE MATERIAL SE PODRÁ ENCONTRAR INFORMACIÓN SOBRE LOS CONTROLES.

FLEXGRID Y DATAGRID ALONZO SAJCHÉ MYNOR ROCAEL. 6to. PERITO CONTADOR CON ESPECIALIDAD EN COMPUTACIÓN. MAESTRO: GELVER MIGUEL GUERRA. CICLO ESCOLAR 2008. JORNADA. VESPERTINA.


CONTROL MSFLEXGRID

INGRESAR DATOS EN EL GRID Hay varias maneras de poblar datos en un MSFLEXGRID. No hay ninguna "oficial" o con claras diferencias de velocidad por lo que el elegir una u otra depende del origen de los datos y del gusto del programador. Para datos contenidos en una base de datos la opción obvia es ligar el grid a un DataControl. Una vez establecidas las propiedades DatabaseName y RecordSource del DataControl, simplemente hay que usar la propiedadDataSource del MSFlexGrid para ligar el grid al DataControl. El grid se llenará automáticamente con los datos, una fila por cada registro. La primera fila contendrá las cabeceras de las comunas derivadas de los nombres de los campos de la base de datos. Si no quieres estas cabeceras emplea el método RemoveItem para borrarlas. Como MSFlexGrid no permite borrar una línea de cabecera (fija), debes poner primero la propiedad FixedRows a cero. En el modo no enlazado, MSFlexGrid es un contenedor de datos: pones el dato una vez y permanece allí durante la vida del grid. Existen cuatro propieadades y un método que te ayudarán a hacer esto : el método AddItem method, y las propiedades Clip, Text, TextArray y TextMatrix. Si está usando el grid como listbox, o prefieres pensar en él como en un listbox, usa el método AddItem para poblarlo. El siguiente código crea un grid de dos columnas con las letras desde la A hasta la Z y sus códigos ASCII. MSFlexGrid1.Rows = 0 For I = Asc("A") To Asc("Z") MyData = Chr$(I) & vbTab & I MSFlexGrid1.AddItem MyData Next El método AddItem añadirá 26 filas a las existentes en el grid, por eso ponemos la propiedad Rows a cero antes de empezar. Hay que tener en cuenta que el tabulador (vbTab) se usa para separar los datos para la segunda columna. El método AddItem tiene un parámetro opcional Index para añadir la fila en una localización específica. La propiedad Clip se usa para rellenar un grid con un rango de datos de algún origen de datos que tenga un método Clip compatible. Un rdoResulset es un origen de datos y su método GetClipString cumple las condiciones. El siguiente ejemplo cojerá las primeras cuatro filas de la tabla Customers y las copiará en las filas 5 a 8 del grid.


Dim rs As rdoResultset Set rs = MyConnection.OpenResultset("Customers") >select the target range MSFlexGrid1.Row = 5 MSFlexGrid1.Col = 1 MSFlexGrid1.RowSel = 8 MSFlexGrid1.ColSel = rs.rdoColumns.Count >get the data MSFlexGrid1.Clip = rs.GetClipString(4) >returns 4 rows Hay que destacar que no hemos tenido que tratar los datos a nivel de campo, la propiedad Clip lo hace por nosotros. La propiedad Clip retorna los datos formateados de manera que también nos servirían para hacer Cortar y Pegar desde una zona del grid a otra. La propiedad Text es usada frecuentemente para asignar el contenido de una celda. Esta celda debe ser la celda activa, por lo que previamente debes emplear las propiedades Row y Col para seleccionar la celda deseada. Para asignar un valor a un rango de celdas debes emplear la propiedad FillStyle conjuntamente con la porpiedad Text. El código siguiente pone una "X" en cada celda de un grid : MSFlexGrid1.Row = 0 MSFlexGrid1.Col = 0 MSFlexGrid1.RowSel = MSFlexGrid1.Rows - 1 MSFlexGrid1.ColSel = MSFlexGrid1.Cols - 1 MSFlexGrid1.FillStyle = flexFillRepeat MSFlexGrid1.Text = "X" Si tu no quieres cambiar de celda activa para asignar valores debes emplear las propiedades TextArray y TextMatrix. Estas propiedades dan valor a un grupo arbitrario de celdas sin cambiar las propiedades Row y Col. TextMatrix direcciona una celda empleando la notación de fila y columna. TextArray usa un índice para referenciar una celda. Este índice es simplemente una numeración, empezando en cero, de las celdas de izquierda a derecha y de arriba a abajo. En un grid de 2 x 2 las siguientes líneas modifican el valor de la celda inferior derecha : MSFlexGrid1.TextArray(3) = "X" MSFlexGrid1.TextMatrix(1,1) = "X" Como pudimos darnos cuenta existen tantas formarmas de colocar datos en un GRID, todo depende de la capacidad del programador, de la forma en que lo quiera trabajar o simplemente de la naturaleza de los datos.


TECNICAS DE ORDENACION MSFlexGrid tiene capacidades de ordenación flexibles y rápidas. En muchos casos es más rápido usar la ordenación interna que emplear la cláusula ORDER BY en la consulta SQL. Las opciones de ordenación te permiten ordenar ascendente o descendentemente tanto números como caracteres. La ordenación de caractéres puede ser sensible a mayúsculas / minúsculas o nó, según se desee. La propiedad Sort especifica el tipo de ordenación. Esta propiedad puede ser entendida también como un método porque la acción de ordenar se produce cuando se modifica su valor. Puedes ordenar varias columnas para dar un efecto de ordenación por varias claves. Existen dos técnicas que pueden ser usadas para dar más flexibilidad a la ordenación. Establecer la propiedad Sort a flexSortCustom hace que el evento Custom se dispare cada vez que el grid es ordenado. Puedes usar este evento para implementar cualquier tipo de ordenación que quieras. El segundo método emplea una columna oculta y deja que el grid haga el trabajo. Supongamos que tienes un campo de una base de datos que devuelve una fecha en formato corto. Ni la ordenación numérica ni la de caracteres ordenará correctamente esta columna. Para ordenar por fecha necesitas añadir una columna extra y ponerle anchura cero. Rellena la columna con los valores obtenidos de convertir la fecha en número y ordena por esta columna como se muestra (asumimos que la fecha está en la columna 2): Dim Ro As Integer Dim SortCol As Integer Dim SortDate As Double >add a column to hold the sort key MSFlexGrid1.Cols = MSFlexGrid1.Cols + 1 SortCol = MSFlexGrid1.Cols - 1 MSFlexGrid1.ColWidth(SortCol) = 0 >invisible >calculate key values & populate grid For Ro = 1 To MSFlexGrid1.Rows - 1 SortDate = DateValue(MSFlexGrid1.TextMatrix(Ro, 2)) MSFlexGrid1.TextMatrix(Ro, SortCol) = SortDate Next Ro >do the sort MSFlexGrid1.Col = SortCol >set the key MSFlexGrid1.Sort = flexSortNumericAscending


EDITANDO LOS DATOS DEL GRID MSFlexGrid no tiene incluída la capacidad de editar celdas, pero provee los instrumentos necesarios para que sea sencillo añadirla mediante programación. La ventaja de esto es que puedes implementarla a tu gusto. La técnica se basa en que la edición no ocurre realmente en el grid sino en un textbox posicionado sobre la celda editada. En este ejemplo, daremos al usuario dos formas de entrar en modo edición, por hacer doble click en una celda o, simplemente, por empezar a escribir sobre ella. Las siguientes dos rutinas implementan esto : Private Sub MSFlexGrid1_DblClick() GridEdit Asc(" ") End Sub Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer) GridEdit KeyAscii End Sub En cada caso llamamos a la rutina de edición y le pasamos la pulsación de una tecla. En el caso del doble click le pasamos un espacio en blanco. La rutina GridEdit inicializa el textbox y lo mueve a su posición. Sub GridEdit(KeyAscii As Integer) >emplear la fuente correcta Text1.FontName = MSFlexGrid1.FontName Text1.FontSize = MSFlexGrid1.FontSize Select Case KeyAscii Case 0 To Asc(" ") Text1 = MSFlexGrid1 Text1.SelStart = 1000 Case Else Text1 = Chr(KeyAscii) Text1.SelStart = 1 End Select >posicionar el textbox Text1.Left = MSFlexGrid1.CellLeft + MSFlexGrid1.Left Text1.Top = MSFlexGrid1.CellTop + MSFlexGrid1.Top Text1.Width = MSFlexGrid1.CellWidth Text1.Height = MSFlexGrid1.CellHeight Text1.Visible = True Text1.SetFocus End Sub Por propósitos de demostración, la instrucción Case en la rutina GridEdit


muestra dos maneras diferentes de entrar en modo edición. En la práctica es probable que emplees sólo uno de ellos, o uno diferente creado por ti. Si se entra en modo edición mediante doble click se copian los contenidos de la celda en el textbox y se pone el cursor al final del mismo. Si entramos presionando una tecla normal, se ignora el contenido de la celda y se inserta la tecla pulsada en el textbox. El posicionamiento del textbox puede realizarse en una sola instrucción empleando el método Move. Hamos usado cuatro líneas para facilitar la lectura de este artículo. Ahora necesitamos uan serie de rutinas que manejen lo que sucede cuando el usuario se mueve a diferente celda o a otro control. El evento LeaveCell será tambien el lugar en el que pondrás las validaciones que necesites. Private Sub MSFlexGrid1_LeaveCell() If Text1.Visible Then MSFlexGrid1 = Text1 Text1.Visible = False End If End Sub Private Sub MSFlexGrid1_GotFocus() If Text1.Visible Then MSFlexGrid1 = Text1 Text1.Visible = False End If End Sub Pondremos ahora un poco de código de navegación en el evento KeyDown del textbox para que, por ejemplo, el usuario pueda abandonar el modo edición presionando Esc y moverse a otra fila presionando "las flechas". Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyEscape Text1.Visible = False MSFlexGrid1.SetFocus Case vbKeyReturn MSFlexGrid1.SetFocus Case vbKeyDown MSFlexGrid1.SetFocus DoEvents If MSFlexGrid1.Row < MSFlexGrid1.Rows - 1 Then MSFlexGrid1.Row = MSFlexGrid1.Row + 1 End If Case vbKeyUp MSFlexGrid1.SetFocus


DoEvents If MSFlexGrid1.Row > MSFlexGrid1.FixedRows Then MSFlexGrid1.Row = MSFlexGrid1.Row - 1 End If End Select End Sub Finalmente necesitamos una línea de código para suprimir el Beep que ocurre cuando presionamos la tecla Enter en un textbox: Private Sub Text1_KeyPress(KeyAscii As Integer) >suppresión del beep If KeyAscii = vbKeyReturn Then KeyAscii = 0 End Sub Para lograr el efecto pretendido tenemos que asignar algunas propiedades al textbox en tiempo de diseño : Appearance = 0 (flat) y BorderStyle = 0 (none). También debemos poner Visible = False para que el textbox no sea inicialmente visible. Para mejorar este código el textbox necesita un desplazamiento adicional hacia abajo y hacia la derecha (con la correspondiente reduccion de tamaño) para que el texto esté exactamente alineado con el de las celdas adyacentes. Probablemente también quieras escribir algo de código en el evento scroll del grid para que hacer un click en la barra de scroll del grid no haga perder el foco al textbox. Ten en cuenta que esta técnica no está limitada a usar un TextBox para la edicion. Puedes usar un combobox, checkbox o incluso un control de calendario para editar, según la columna que estés editando. MSFlexGrid es un control muy flexible y este artículo sólo toca algunas de las cosas que puedes hacer con él. Según te vayas familiarizando con él, irá pasando a formar parte de tus herramientas de trabajo. La mezcla de celdas y el "pivoting" son dos características únicas en el MSFlexGrid que le dan un tremendo poder.

FUNCIÓN QUE SIRVE PARA SUMAR LOS NÚMEROS DE UNA COLUMNA O FILA DE UN FLEXGRID, A mí en lo personal me ha sido de mucha utilidad, sobre todo cuando se trata de facturación o cosas por el estilo.


Epero que les sea útil a alguien como me ha sido útil a mí, agradecería cualquier critica para implementarla en mi código. Ahí les vá... Public Function Sumar(Grid As MSFlexGrid, Optional SumVertical As Boolean = True, _ Optional ColOrRow As Long, Optional IncluirFixeds As Boolean = False) As Double 'esta función suma en un grid una columana o una fila 'depende si el argumento sumVertical está está establecido a true. 'si sumvertical está establecido a true hace la sumatoria tomando 'los valores de la columna especificada en el parámetro ColOrRow, 'de otro modo la sumatoria se realiza tomando los valores 'de la fila especificada en el parámetro ColOrRow. 'incluirfixeds es un parámetro que usa la función para saber 'si las filas o colmnas fijas también se usarán para tomar los 'valores a sumar. Dim GridTmp As MSFlexGrid Set GridTmp = Grid 'almacena el total. Dim totalTMP As Double totalTMP = 0 'contador Dim j As Long j=0 With GridTmp If SumVertical Then 'verificando que la columna especificada sea 'una columna válida del grid. If ColOrRow > (.Cols - 1) Then Sumar = 0 Exit Function End If 'operación incluyendo filas fijas. .Col = ColOrRow If IncluirFixeds Then 'bucle de suma. For j = 0 To .Rows - 1 .Row = j


totalTMP = totalTMP + CDbl(Format(.Text, "#,##0.00")) Next j Else 'operaci贸n exluyendo filas fijas 'comprobando que hayan mas filas no fijas que fijas. If .Rows > .FixedRows Then For j = .FixedRows To .Rows - 1 .Row = j totalTMP = totalTMP + CDbl(Format(.Text,"#,##0.00")) Next j Else totalTMP = 0 Exit Function End If End If 'de incluirFixeds Else 'de SumarVertical. 'verificando que la fila especificada se una fila 'v谩lida del grid. If ColOrRow > (.Rows - 1) Then Sumar = 0 Exit Function End If 'operaci贸n incluyendo columnas fijas. .Row = ColOrRow If IncluirFixeds Then 'bucle de suma. For j = 0 To .Cols - 1 .Col = j totalTMP = totalTMP + CDbl(Format(.Text, "#,##0.00")) Next j Else 'operaci贸n exluyendo columnas fijas 'comprobando que hayan mas columnas no fijas que fijas. If .Cols > .FixedCols Then For j = .FixedCols To .Cols - 1 .Col = j totalTMP = totalTMP + CDbl(Format(.Text,"#,##0.00")) Next j Else totalTMP = 0 Exit Function End If End If 'de incluirFixeds End If 'de Sumvertical.


End With Sumar = totalTMP End Function CÓDIGOS QUE PERMITEN PASAR DE UN FLEXGRID AL PORTAPAPELES Y A EXCEL. Codigos que permiten pasar del grid al portapapeles y también al programa de excel. Hago la aclaración que al momento de colocar éste código en un GRID no funcionará inmediatamente porque dependerá del nombre del GRID con el que el programador esté trabajando en determinada ocasión. También dependerá del tipo de datos con lo que se esté trabajando. Pero simplemente se deberán hacer las correcciones correspondientes para que dichos códigos funcionen perfectamente. Para pasar del GRID al portapapeles Public Sub CopiaFlex(Miflex As MSHFlexgrid, blnTodo As Boolean, Optional xIni As Long, Optional xFin As Long, Optional yIni As Long, Optional yFin As Long) Dim r As Long Dim c As Long Dim ct As Long Dim rt As Long Dim ci As Long Dim ri As Long Dim str As String With Miflex If blnTodo = True Then ci = 0 ri = 0 ct = .Cols - 1 rt = .Rows - 1 Else ci = yIni ri = xIni ct = yFin rt = xFin End If For r = ri To rt For c = ci To ct str = str & .TextMatrix(r, c) If c <> ct Then str = str & vbTab Next c


str = str & vbCr Next r End With Clipboard.Clear Clipboard.SetText str, 1 End Sub ==================================================== ===================================================== ===================================================

Para Exportar a excel Public Sub ExcelSuperioresCompro3() Dim XlsApl As Excel.Application Dim xlsLibro As Excel.Workbook Dim y As Long MiRespuesta = MsgBox("多Desea Exportar a Excel el Listado seleccionado?", vbYesNoCancel + vbQuestion) If MiRespuesta <> vbYes Then Exit Sub Screen.MousePointer = 11 Set XlsApl = New Excel.Application With XlsApl .Workbooks.Add Set xlsLibro = .ActiveWorkbook With xlsLibro.Worksheets(1) .Activate For x = 0 To MSHFsupEnvios.Rows - 1 For y = 1 To MSHFsupEnvios.Cols .Cells(x + 1, y) = MSHFsupEnvios.TextMatrix(x, y - 1) End If Next y Next x End With .Visible = True End With Set xlsLibro = Nothing Set XlsApl = Nothing


Screen.MousePointer = 0 End Sub

OTRO CODIGO FUENTE QUE PERMITE TAMBIÉN EXPORTAR A EXCEL ES EL SIGUIENTE: Private Sub xls_Click() Dim xlsApl As Excel.Aplication Dim xlsLibro As Excel.workbook Dim y As Long mi respuesta = MsgBox("¿desea exportar a excel el listado seleccionado?", vbYesNoCancel + vbQuestion) If mirespuesta <> vbYes Then Exit Sub Screen.mousepointeir = 11 Set xlsApl = NewExcel.Aplication With xlsApl .workbook.Add Set xlsLibro = .ActiveWorkbook With xlsLibro.worksheets(1) .Activete For x = 0 To MSHFsupEnvios.Row - 1 For y = 1 To MSHFsupEnvios.Cols .cells(x + 1, y) = MSHFsupEnvios.TextMatrix(x, y - 1) End If Next y Next x End With .Visible = True End With Set xlsLibro = Nothing Set xlsApl = Nothing Screen.MousePointer = 0 End Sub End Sub

FUNCIÓN DE EJEMPLO QUE PERMITE ORDENAR EN FORMA ASCENDENTE Y DESCENDENTE LAS COLUMNAS DE UN CONTROL MS FLEXGRID AL CLICKEAR EN UNA COLUMNA DETERMINADA Esta tiene una función llamada Ordenar_Columna_FlexGrid, que se le debe enviar como parámetro el control FlexGrid.


La rutina de muestra es como muestra el siguiente gr谩fico:

Nota: Para conocer las posibles opciones y formas de ordenaci贸n, consultar las constantes del Enum SortSettings. desde el Examinador de propiedades del Visual basic, como muestra esta imagen:

Colocar un control FlexGrid en el Formulario y pegar el siguiente c贸digo fuente


Option Explicit 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.

' Cada ves que se presiona en en el encabezado de columna del Flexgrid se llama _ a la funci贸n pasandole la columna y el control FlexGrid como par谩metro '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub MSFlexGrid1_MouseUp( _ Button As Integer, _ Shift As Integer, _ x As Single, _ y As Single) With MSFlexGrid1 If .MouseRow <> 0 Then Exit Sub End If 'La funci贸n retorna el tipo de orden, es decir esta declarada como As SortSettings If Ordenar_Columna_FlexGrid(MSFlexGrid1, .MouseCol) = flexSortGenericAscending Then Me.Caption = " FlexGrid en orden: Ascendente " Else Me.Caption = " FlexGrid en orden: Descendente " End If End With End Sub 'Esto agrega n煤meros aleatorios al Flexgrid Private Sub Agregar_Datos_FlexGrid() Dim columna As Integer, i As Integer For i = 1 To 10 MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 For columna = 0 To 3 MSFlexGrid1.TextMatrix(i, columna) = Numero_Aleatorio(1500, i) Next

Next End Sub Private Sub Form_Load()

With MSFlexGrid1 ' Para que se pueda redimnesionar el ancho de la columna .AllowUserResizing = 1 'Agregamos 4 columnas .Cols = 4 .FixedCols = 0 .FixedRows = 1 End With sCol = -1 'carga los datos para el ejemplo Agregar_Datos_FlexGrid


61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72.

End Sub 'Función para generar valores aleatorios para insertar en el FlexGrid Private Function Numero_Aleatorio( _ Upper As Integer, _ Lower As Integer) As Integer Randomize 'Retornar el número a la función Numero_Aleatorio = Int((Upper - Lower + 1) * Rnd + Lower) End Function

EN ESTE SIMPLE EJEMPLO PASA O COPIAR EL CONTENIDO DE UN ARRAY O MATRIZ DE DATOS A UN CONTROL FLEXGRID. Antes de pasar los datos, en el ejemplo, se utiliza un array de 2 Dimensiones que previamente se carga con algunos valores en un For-next. Luego de cargarse los valores en la matriz, se llama a la sub Array_a_FlexGrid y se le envía como parámetro el Array y el control Ms FlexGid Luego dentro de la sub obtiene los valores máximos y mínimos de las dimensiones para poder, mediante un bucle For-Next llenar el Flex con el método TextMatrix del control

Controles Agegar un control FlexGid en el Formulario un Command1

Pegar el código fuente en el Form: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.

Option Explicit

'Función que recibe como parámetro la matriz y el control FlexGrid ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub Array_a_FlexGrid(ByRef elArray() As Variant, ByVal FlexGrid As MSFlexGrid) Dim VFMin As Integer, VColMin As Integer, VFMax As Integer Dim VColMax As Integer, Fila As Integer, Columna As Integer 'Alamacena el primer y último valor de cada dimensión del array VFMin = LBound(elArray, 1) VFMax = UBound(elArray, 1) VColMin = LBound(elArray, 2) VColMax = UBound(elArray, 2) With FlexGrid .FixedCols = 0 .FixedRows = 0 'Añade las filas y columas .Rows = VFMax - VFMin + 1 .Cols = VColMax - VColMin + 1


26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.

End With ' Bucle con las variables anteriores para agregar mediante _ TextMatrix los valores en el FlexGrid For Fila = VFMin To VFMax For Columna = VColMin To VColMax FlexGrid.TextMatrix(Fila - VFMin, Columna - VColMin) = elArray(Fila, Columna) Next Next End Sub

Private Sub Command1_Click() Dim UnArray(1000, 2) As Variant, i As Long, j As Long 'Se cargan datos de ejemplo en el Array For j = 0 To 2 For i = 0 To 1000 UnArray(i, j) = i Next Next 'Se envía el Array anterior y el control FlexGrid como parámetro Call Array_a_FlexGrid(UnArray(), MSFlexGrid1) End Sub Private Sub Form_Load() Me.Caption = " Ejemplo para copiar o pasar un Array o Matriz a un control FlexGrid " End Sub

Option Explicit

'Función que recibe como parámetro la matriz y el control FlexGrid ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub Array_a_FlexGrid(ByRef elArray() As Variant, ByVal FlexGrid As MSFlexGrid) Dim VFMin As Integer, VColMin As Integer, VFMax As Integer Dim VColMax As Integer, Fila As Integer, Columna As Integer

Las propiedades que más he utilizado en el datagrid son las siguientes: Nombre: permite cambiar el nombre al formulario. Fore color: esta opción nos da la pauta a cambiar el color de fuente al gusto del programador. Back color: dicha opción nos permite darle un color al GRID. Font: Esta propiedad nos permite cambiar el tipo de fuente que deseamos.


Caption: En esta propiedad podemos introducir cualquier texto en lo que son los commandos y los labels o en cualquier otro tipo de control. Existen más propiedades que se pueden utilizar en el DataGrid, pruébalas, revisa la ayuda para que sepas que otra cosa más se puede hacer. Los eventos que más uso en el DataGrid son: ButtonClick: cuando ".Button = True", es el evento que indica que se pulsó el control que tienes en la celda, esto hace que se active otro control que pusieras, ya sea un ComboBox o un CheckBox Click: ocurre cuando das un clic en cualquier parte del datagrid RowColChange: ocurre casi igual que el clic, solo que este también te dice cuáles son las coordenadas actuales sobre las que está el cursor, también te dice cuáles eran las coordenadas anteriores. Visual Basic 5.0 viene con tres controles de grid : Grid, DBGrid y MSFlexGrid. Grid es el grid original de Visual Basic grid desde la versión 1.0 en 1991. DBGrid es la versión del Apex TrueGrid que vino con el Visual Basic 4.0 en 1995. El nuevo de los tres es el MSFlexGrid, una versión del a version VSFLEX de VideoSoft. Comparando el Grid y el DbGrid, Grid es más simple y ocupa una sexta parte aunque ha sido mucho menos empleado por los programadores y se suministra sólo por compatibilidad. MSFlexGrid se añadió porque soporta casi todas las propiedades y métodos del Grid y, aunque ocupa el doble, está tan mejorado que es una excelenta alternativa para reemplazar el Grid en los proyectos existentes. La pregunta real sobre qué grid utilizar se limita a una elección entre el DbGrid y el MSFlexGrid. Ambos son muy ricos y altamente personalizables. Hay unos puntos claros de partida. Si necesitas un ligado a datos completo elige el DbGrid ya que el MSFlexGrid se liga en sólo lectura. Por otra parte si necesitas combinar celdas o data pivoting, MSFlexGrid es tu única opción. Además de esto cada uno tiene su propio aspecto y el MSFlexGrid tiene la ventaja de su menor tamaño.

ESTE EJEMPLO MUESTRA COMO PODER HACER UN DRAG AND DROP O ARRASTRE DE COLUMNAS EN UN CONTROL FLEXGRID En el ejemplo , el control FlexGrid está enlazado a un control Data para hacerlo mas simple.


Al presionar un Command1 se llama a una rutina llamada Cargar_FlexGrid en el cual se le debe enviar el control FlexGrid, la ruta de la base de datos, la sentencia sql y el control Data, por ejemplo:

Call Cargar_FlexGrid(Path, "Select * From Authors", Data1, MSFlexGrid )

También hay que indicar en la propiedad DataSource del control FlexGrid el control Data, en este caso es un Data1 Una cosa importante es que se debe indicar en la propiedad DragIcon, un archivo de cursor para que se visualice mientras se arrastra la columna, por ejemplo:

MSFlexGrid1.DragIcon = LoadPicture("c:\icono-drag.ico")

Para el ejemplo colocar

Un control MsFlexgrid Un Command1 Un Data

pegar el siguiente código fuente en un formulario: 1. Option Explicit 2. 3. Private Sub Command1_Click() 4. 5. Dim Path As String 6. Path = "C:\Archivos de programa\Microsoft Visual Studio\VB98\Biblio.mdb" 7. 8. Call Cargar_FlexGrid( _ 9. Path, _ 10. "Select * From Authors", _ 11. Data1, _ 12. MSFlexGrid1) 13. 14. End Sub 15. 16. Private Sub Form_Load() 17. 18. Command1.Caption = " Cargar datos en el FlexGrid " 19. 20. 'Opcional: Acá especificar el Icono a mostrar cuando se haga _ 21. el drag de la columna del Flexgrid 22.


23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84.

MSFlexGrid1.DragIcon = LoadPicture("c:\icono-drag.ico") End Sub Private Sub MSFlexGrid1_DragDrop( _ Source As VB.Control, _ X As Single, _ Y As Single) With MSFlexGrid1 If .Tag = "" Then Exit Sub End If .Redraw = False .ColPosition(Val(.Tag)) = .MouseCol Call Ordenar(MSFlexGrid1) .Redraw = True End With End Sub Private Sub MSFlexGrid1_MouseDown( _ Button As Integer, _ Shift As Integer, _ X As Single, _ Y As Single) With MSFlexGrid1 .Tag = "" If .MouseRow <> 0 Then Exit Sub End If .Tag = Str(.MouseCol) .Drag 1 End With End Sub Private Sub Cargar_FlexGrid( _ p As String, _ s As String, _ Data As Data, _ FlexGrid As MSFlexGrid) Dim i As Integer On Error GoTo errSub Data.DatabaseName = p FlexGrid.Redraw = False With FlexGrid .Row = 0 .ColAlignment(0) = 7 For i = 0 To .Cols - 1


85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117.

.Col = i .CellFontSize = 14 .CellAlignment = 4 .MergeCol(i) = True .ColWidth(i) = 2200 Next i .MergeCells = flexMergeRestrictColumns End With Data.RecordSource = s Call Ordenar(FlexGrid) Data.Refresh FlexGrid.Redraw = True

Exit Sub errSub: MsgBox Err.Number & " " & Err.Description End Sub Sub Ordenar(FlexGrid As MSFlexGrid) With FlexGrid .Col = 0 .ColSel = .Cols - 1 .Sort = 1 End With End Sub

FLEXGRID A MATRIZ Este otro c贸digo , llena unos datos a un Flexgrid y luego pasa los mismos a una matriz En este caso se cargan 12 filas en tres columnas


Controles

Colocar un control MsFlexgrid1 un Command1

C贸digo fuente 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.

Option Explicit ' recibe el flexgrid Private Sub Pasar_a_Matriz(flex As MSFlexGrid) Dim Columna As Integer, fila As Integer fila = flex.Rows Columna = flex.Cols ' redimensiona la matriz a la cantidad de filas y columnas ReDim matriz(0 To fila, 0 To Columna) As String ' llena la matriz '''''''''''''''''''''' ' recorre las filas For fila = 0 To flex.Rows - 1 ' recorre los encabezados For Columna = 0 To flex.Cols - 1 matriz(fila, Columna) = flex.TextMatrix(fila, Columna) Next Next End Sub Private Sub Command1_Click() ' le pasa el Msflexgrid como argumento Call Pasar_a_Matriz(MSFlexGrid1) End Sub Private Sub Form_Load() With MSFlexGrid1 .FixedCols = 0 ' Tres encabezados .FormatString = "Col 1|Col 2|Col 3" ' ancho de las Cols .ColWidth(0) = 2000 .ColWidth(1) = 2000 .ColWidth(2) = 2000 Dim i As Integer Dim item As String ' llena una cuadr铆cula o matriz de 3 x 12 For i = 1 To 12


47. item = "Item: " & "Fila: " & i & " " 48. .AddItem item & "Col:1" & vbTab & _ 49. item & "Col:2" & vbTab & _ 50. item & "Col:3", i 51. Next 52. 53. End With 54. 55. Command1.Caption = "pasar grilla a la matriz" 56. 57. End Sub

CODIGO FUENTE PARA IMPRIMIR DATOS QUE ESTAN EN EL GRID. Aclaración: Al momento de que usted agregue este código y observa que no le funciona, haga las correcciones correspondientes, incerte el nombre correspondiente al GRID, verifique la cantidad de datos que existen en el mismo, etc; ya que, todos los códigos funcionarán tal y como el programador los utilice o dependen del tipo de datos con que se esté trabajando en dicha ocasión. Private Sub cmdImprimir_Click() Printer.NewPage Cargar Dim c Dim orientacion orientacion = CommonDialog1.Orientation 'Printer.PaperSize = 256 Printer.Font = "Courier new" Printer.FontBold = True Printer.FontSize = "16" Printer.Print ; Tab(18); Tit.Caption; 'Printer.PaperSize = vbPRPSLetter Printer.FontSize = "12" Printer.Print ; "" Printer.Print ; "" Printer.Print ; Tab(7); "NOMBRE O RAZÓN SOCIAL:"; Tab(30); TextO.Text; Tab(63); "NIT:"; Tab(68); TextY.Text; "" Printer.Print ; "" Printer.Print ; Tab(7); "CODIGO DE MES:"; Tab(22); Text1.Text; Tab(32); "NOMBRE:"; Tab(40); TextE.Text; Tab(63); "AÑO:"; Tab(68); txtaño.Text 'Printer.Print ; Tab(7); "TEL:"; Tab(32); Tx4.Text; 'Printer.Print ; Tab(7); "DIRECCIÓN:"; Tab(32); Tx7.Text; 'Printer.Print ; Tab(7); "NOMBRE DE QUIEN RECIBE:"; Tab(32); Tx9.Text; 'Printer.Print ; Tab(7); "HORARIO QUE RECIBE:"; Tab(32); Tx3.Text; 'Printer.Print ; Tab(7); "FECHA:"; Tab(32); Tx5.Text;


'Printer.Print ; Tab(7); "VENDEDOR:"; Tab(32); Tx8.Text 'Printer.Print ; Tab(7); "PILOTO:"; Tab(32); Tx6.Text; 'Printer.Print ; Tab(7); "CAMIÓN:"; Tab(32); Tx10.Text; 'Printer.Print ; Tab(7); "KILOMETROS ASFALTO:"; Tab(32); Tx11.Text; Tab(40); "KILOMETROS TERRACERIA:"; Tab(65); Tx12.Text; Tab(73); "OTROS:"; Tab(80); Tx13.Text; ' Printer.FontSize = 9 ' Printer.Print ; Tab(7); "FLETES A REALIZAR: "; Text1.Text 'Printer.FontBold = True 'Printer.Print ; "" 'Printer.FontSize = "8" Printer.Print ; Tab(8); "______________________________________________________________________ ________________________________________"; With Fac Printer.Print ; Tab(7); "|" & .TextArray(0) & " | " & .TextArray(1) & " | " & .TextArray(2) & " | " & .TextArray(3) & " | " & .TextArray(5) & " | " & .TextArray(7) & " | " & .TextArray(8) & " |"; '8 13 24 36 77 91 105 119 Printer.Print ; Tab(7); "|____|__________|___________|________________________________________ |_____________|_____________|_____________|"; Printer.FontBold = False Printer.Print ; Tab(7); "|"; Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(1, 0); Tab(14); .TextMatrix(1, 1); Tab(25); .TextMatrix(1, 2); Tab(37); .TextMatrix(1, 3); Tab(78); .TextMatrix(1, 5); Tab(92); .TextMatrix(1, 7); Tab(106); .TextMatrix(1, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(2, 0); Tab(14); .TextMatrix(2, 1); Tab(25); .TextMatrix(2, 2); Tab(37); .TextMatrix(2, 3); Tab(78); .TextMatrix(2, 5); Tab(92); .TextMatrix(2, 7); Tab(106); .TextMatrix(2, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(3, 0); Tab(14); .TextMatrix(3, 1); Tab(25); .TextMatrix(3, 2); Tab(37); .TextMatrix(3, 3); Tab(78); .TextMatrix(3, 5); Tab(92); .TextMatrix(3, 7); Tab(106); .TextMatrix(3, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(4, 0); Tab(14); .TextMatrix(4, 1); Tab(25); .TextMatrix(4, 2); Tab(37); .TextMatrix(4, 3); Tab(78); .TextMatrix(4, 5); Tab(92); .TextMatrix(4, 7); Tab(106); .TextMatrix(4, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(5, 0); Tab(14); .TextMatrix(5, 1); Tab(25); .TextMatrix(5, 2); Tab(37); .TextMatrix(5, 3); Tab(78); .TextMatrix(5, 5); Tab(92); .TextMatrix(5, 7); Tab(106); .TextMatrix(5, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(6, 0); Tab(14); .TextMatrix(6, 1); Tab(25); .TextMatrix(6, 2); Tab(37); .TextMatrix(6, 3); Tab(78); .TextMatrix(6, 5); Tab(92); .TextMatrix(6, 7); Tab(106); .TextMatrix(6, 8); Tab(118); "|";


Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(7, 0); Tab(14); .TextMatrix(7, 1); Tab(25); .TextMatrix(7, 2); Tab(37); .TextMatrix(7, 3); Tab(78); .TextMatrix(7, 5); Tab(92); .TextMatrix(7, 7); Tab(106); .TextMatrix(7, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(8, 0); Tab(14); .TextMatrix(8, 1); Tab(25); .TextMatrix(8, 2); Tab(37); .TextMatrix(8, 3); Tab(78); .TextMatrix(8, 5); Tab(92); .TextMatrix(8, 7); Tab(106); .TextMatrix(8, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(9, 0); Tab(14); .TextMatrix(9, 1); Tab(25); .TextMatrix(9, 2); Tab(37); .TextMatrix(9, 3); Tab(78); .TextMatrix(9, 5); Tab(92); .TextMatrix(9, 7); Tab(106); .TextMatrix(9, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(10, 0); Tab(14); .TextMatrix(10, 1); Tab(25); .TextMatrix(10, 2); Tab(37); .TextMatrix(10, 3); Tab(78); .TextMatrix(10, 5); Tab(92); .TextMatrix(10, 7); Tab(106); .TextMatrix(10, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(11, 0); Tab(14); .TextMatrix(11, 1); Tab(25); .TextMatrix(11, 2); Tab(37); .TextMatrix(11, 3); Tab(78); .TextMatrix(11, 5); Tab(92); .TextMatrix(11, 7); Tab(106); .TextMatrix(11, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(12, 0); Tab(14); .TextMatrix(12, 1); Tab(25); .TextMatrix(12, 2); Tab(37); .TextMatrix(12, 3); Tab(78); .TextMatrix(12, 5); Tab(92); .TextMatrix(12, 7); Tab(106); .TextMatrix(12, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(13, 0); Tab(14); .TextMatrix(13, 1); Tab(25); .TextMatrix(13, 2); Tab(37); .TextMatrix(13, 3); Tab(78); .TextMatrix(13, 5); Tab(92); .TextMatrix(13, 7); Tab(106); .TextMatrix(13, 8); Tab(118); "|"; Printer.Print ; Tab(7); "|"; Tab(8); .TextMatrix(14, 0); Tab(14); .TextMatrix(14, 1); Tab(25); .TextMatrix(14, 2); Tab(37); .TextMatrix(14, 3); Tab(78); .TextMatrix(14, 5); Tab(92); .TextMatrix(14, 7); Tab(106); .TextMatrix(14, 8); Tab(118); "|"; Printer.FontBold = True Printer.Print ; Tab(7); "|____________________________________________________________________ __________________________________________|"; ' Text11.SelLength = Len(Text11.Text) ' Text10.SelLength = Len(Text10.Text) ' Printer.Print ; Tab(78); "Total Flete"; Tab(118 - Text11.SelLength); Text11.Text; ' Printer.Print ; Tab(78); "Total Final"; Tab(118 - Text10.SelLength); Text10.Text; ' Printer.FontSize = 14 ' Printer.Print ; Tab(7); "Copia 2" ' Printer.FontSize = 7 'Printer.Print ; Tab(7); Cbr.Caption End With Printer.EndDoc


End Sub

CODIGO FUENTE PARA GUARDAR DATOS EXISTENTES EN EL GRID Aclaración: Al momento de que usted agregue este código y observa que no le funciona, haga las correcciones correspondientes, incerte el nombre correspondiente al GRID, verifique la cantidad de datos que existen en el mismo, etc; ya que, todos los códigos funcionarán tal y como el programador los utilice o dependen del tipo de datos con que se esté trabajando en dicha ocasión. Private Sub cmdGuardar_Click() On Error GoTo error Dim a As String If Len(Dir$(GrdDat)) = 0 Then guar Guar2 a = Rcom.Fg1.Rows - 1 Rcom.Fg1.TextMatrix(a, 1) = TextO.Text Rcom.Fg1.TextMatrix(a, 2) = TextY.Text Rcom.Fg1.TextMatrix(a, 3) = Text1.Text Rcom.Fg1.TextMatrix(a, 8) = TextE.Text Rcom.Fg1.Rows = Rcom.Fg1.Rows + 1 If MsgBox("Desea Guardar y Crear un nuevo Pedido", vbQuestion + vbYesNo, "Guardar") = vbYes Then TextO.Text = TextO.Text + 1 TextO.Text = TextO.Text Limpiar Else End If MsgBox "Los datos han sido guardados", vbInformation, "Guardar" Else MsgBox "El Archivo que desea crear ya Existe", vbCritical, "El Archivo ya Existe" End If error: MsgBox "Guardando", vbInformation, "Dato Guardado" End Sub


CODIGO FUENTE QUE PERMITE QUITAR EL IVA A UNA COMPRA QUE SE REALIZA O SERVICIO. Al mismo tiempo este codigo incluye un formato que sirve para que los decimales se aproximen automรกticamente.

Private Sub summ() 'codificacion de las compras quitando el iva Fac.TextMatrix(1, 9) = Format(Val(Fac.TextMatrix(1, 6)) / 1.12, "###00.0#") Fac.TextMatrix(2, 9) = Format(Val(Fac.TextMatrix(2, 6)) / 1.12, "###00.0#") Fac.TextMatrix(3, 9) = Format(Val(Fac.TextMatrix(3, 6)) / 1.12, "###00.0#") Fac.TextMatrix(4, 9) = Format(Val(Fac.TextMatrix(4, 6)) / 1.12, "###00.0#") Fac.TextMatrix(5, 9) = Format(Val(Fac.TextMatrix(5, 6)) / 1.12, "###00.0#") Fac.TextMatrix(6, 9) = Format(Val(Fac.TextMatrix(6, 6)) / 1.12, "###00.0#") Fac.TextMatrix(7, 9) = Format(Val(Fac.TextMatrix(7, 6)) / 1.12, "###00.0#") Fac.TextMatrix(8, 9) = Format(Val(Fac.TextMatrix(8, 6)) / 1.12, "###00.0#") Fac.TextMatrix(9, 9) = Format(Val(Fac.TextMatrix(9, 6)) / 1.12, "###00.0#") Fac.TextMatrix(10, 9) = Format(Val(Fac.TextMatrix(10, 6)) / 1.12, "###00.0#") Fac.TextMatrix(11, 9) = Format(Val(Fac.TextMatrix(11, 6)) / 1.12, "###00.0#") Fac.TextMatrix(12, 9) = Format(Val(Fac.TextMatrix(12, 6)) / 1.12, "###00.0#") Fac.TextMatrix(13, 9) = Format(Val(Fac.TextMatrix(13, 6)) / 1.12, "###00.0#") Fac.TextMatrix(14, 9) = Format(Val(Fac.TextMatrix(14, 6)) / 1.12, "###00.0#") Fac.TextMatrix(15, 9) = Format(Val(Fac.TextMatrix(15, 6)) / 1.12, "###00.0#") Fac.TextMatrix(16, 9) = Format(Val(Fac.TextMatrix(16, 6)) / 1.12, "###00.0#") Fac.TextMatrix(17, 9) = Format(Val(Fac.TextMatrix(17, 6)) / 1.12, "###00.0#") Fac.TextMatrix(18, 9) = Format(Val(Fac.TextMatrix(18, 6)) / 1.12, "###00.0#") Fac.TextMatrix(19, 9) = Format(Val(Fac.TextMatrix(19, 6)) / 1.12, "###00.0#") Fac.TextMatrix(20, 9) = Format(Val(Fac.TextMatrix(20, 6)) / 1.12, "###00.0#") Fac.TextMatrix(21, 9) = Format(Val(Fac.TextMatrix(21, 6)) / 1.12, "###00.0#") Fac.TextMatrix(22, 9) = Format(Val(Fac.TextMatrix(22, 6)) / 1.12, "###00.0#") Fac.TextMatrix(23, 9) = Format(Val(Fac.TextMatrix(23, 6)) / 1.12, "###00.0#") Fac.TextMatrix(24, 9) = Format(Val(Fac.TextMatrix(24, 6)) / 1.12, "###00.0#") Fac.TextMatrix(25, 9) = Format(Val(Fac.TextMatrix(25, 6)) / 1.12, "###00.0#") Fac.TextMatrix(26, 9) = Format(Val(Fac.TextMatrix(26, 6)) / 1.12, "###00.0#") Fac.TextMatrix(27, 9) = Format(Val(Fac.TextMatrix(27, 6)) / 1.12, "###00.0#") Fac.TextMatrix(28, 9) = Format(Val(Fac.TextMatrix(28, 6)) / 1.12, "###00.0#") Fac.TextMatrix(29, 9) = Format(Val(Fac.TextMatrix(29, 6)) / 1.12, "###00.0#") Fac.TextMatrix(30, 9) = Format(Val(Fac.TextMatrix(30, 6)) / 1.12, "###00.0#")

CODIGO FUENTE QUE PERMITE MULTIPLICAR EL VALOR NETO DE UNA COMPRA O SERVICIO PARA DETERMINAR LA CANTIDAD DEL IVA. Al mismo tiempo este codigo incluye un formato que sirve para que los decimales se aproximen automรกticamente.


'codificacion del iva de servicios Fac.TextMatrix(1, 12) = Format(Val(Fac.TextMatrix(1, 10)) * 0.12, "###00.0#") Fac.TextMatrix(2, 12) = Format(Val(Fac.TextMatrix(2, 10)) * 0.12, "###00.0#") Fac.TextMatrix(3, 12) = Format(Val(Fac.TextMatrix(3, 10)) * 0.12, "###00.0#") Fac.TextMatrix(4, 12) = Format(Val(Fac.TextMatrix(4, 10)) * 0.12, "###00.0#") Fac.TextMatrix(5, 12) = Format(Val(Fac.TextMatrix(5, 10)) * 0.12, "###00.0#") Fac.TextMatrix(6, 12) = Format(Val(Fac.TextMatrix(6, 10)) * 0.12, "###00.0#") Fac.TextMatrix(7, 12) = Format(Val(Fac.TextMatrix(7, 10)) * 0.12, "###00.0#") Fac.TextMatrix(8, 12) = Format(Val(Fac.TextMatrix(8, 10)) * 0.12, "###00.0#") Fac.TextMatrix(9, 12) = Format(Val(Fac.TextMatrix(9, 10)) * 0.12, "###00.0#") Fac.TextMatrix(10, 12) = Format(Val(Fac.TextMatrix(10, 10)) * 0.12, "###00.0#") Fac.TextMatrix(11, 12) = Format(Val(Fac.TextMatrix(11, 10)) * 0.12, "###00.0#") Fac.TextMatrix(12, 12) = Format(Val(Fac.TextMatrix(12, 10)) * 0.12, "###00.0#") Fac.TextMatrix(13, 12) = Format(Val(Fac.TextMatrix(13, 10)) * 0.12, "###00.0#") Fac.TextMatrix(14, 12) = Format(Val(Fac.TextMatrix(14, 10)) * 0.12, "###00.0#") Fac.TextMatrix(15, 12) = Format(Val(Fac.TextMatrix(15, 10)) * 0.12, "###00.0#") Fac.TextMatrix(16, 12) = Format(Val(Fac.TextMatrix(16, 10)) * 0.12, "###00.0#") Fac.TextMatrix(17, 12) = Format(Val(Fac.TextMatrix(17, 10)) * 0.12, "###00.0#") Fac.TextMatrix(18, 12) = Format(Val(Fac.TextMatrix(18, 10)) * 0.12, "###00.0#") Fac.TextMatrix(19, 12) = Format(Val(Fac.TextMatrix(19, 10)) * 0.12, "###00.0#") Fac.TextMatrix(20, 12) = Format(Val(Fac.TextMatrix(20, 10)) * 0.12, "###00.0#") Fac.TextMatrix(21, 12) = Format(Val(Fac.TextMatrix(21, 10)) * 0.12, "###00.0#") Fac.TextMatrix(22, 12) = Format(Val(Fac.TextMatrix(22, 10)) * 0.12, "###00.0#") Fac.TextMatrix(23, 12) = Format(Val(Fac.TextMatrix(23, 10)) * 0.12, "###00.0#") Fac.TextMatrix(24, 12) = Format(Val(Fac.TextMatrix(24, 10)) * 0.12, "###00.0#") Fac.TextMatrix(25, 12) = Format(Val(Fac.TextMatrix(25, 10)) * 0.12, "###00.0#") Fac.TextMatrix(26, 12) = Format(Val(Fac.TextMatrix(26, 10)) * 0.12, "###00.0#") Fac.TextMatrix(27, 12) = Format(Val(Fac.TextMatrix(27, 10)) * 0.12, "###00.0#") Fac.TextMatrix(28, 12) = Format(Val(Fac.TextMatrix(28, 10)) * 0.12, "###00.0#") Fac.TextMatrix(29, 12) = Format(Val(Fac.TextMatrix(29, 10)) * 0.12, "###00.0#") Fac.TextMatrix(30, 12) = Format(Val(Fac.TextMatrix(30, 10)) * 0.12, "###00.0#")

CONTROL DATAGRID PARA USUARIOS DE VISUAL BASIC 6.0 El control DataGrid de Visual Basic 6.0 se ha reemplazado por el control DataGridView de formularios Windows Forms en Visual Basic 2005. Los nombres de algunas propiedades, mĂŠtodos, eventos y constantes son diferentes y, en algunos casos, existen diferencias de comportamiento.


Diferencias conceptuales Enlace 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 DataGrid Como pudimos darnos cuenta anteriormente el control DATAGRID fuen reemplazado por el contro DATAGRIDVIEW. Es por ello que: En 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.0 Private Sub DataGrid1_Click()


DataGrid1.SelStart = 1 DataGrid1.SelLength = DataGrid1.Text MsgBox("The selected text is " & DataGrid1.SelText) End Sub ' VISUAL BASIC 2005 Private 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 DataGrid En 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 Anchor

AllowAddNew

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

AllowUserToResizeRows

AllowUpdate

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 Nota Los 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.

Bookmark

Nueva implementación. Ahora se puede obtener acceso directamente a cualquier elemento.

Caption

Nueva implementación. Utilice un control Label para simular una barra de título.

Col

SelectedColumns

ColumnHeaders

ColumnHeadersVisible

Container

Parent; se hereda de Control.

CurrentCellModified IsCurrentCellDirty, IsCurrentCellInEditMode CurrentCellVisible

CurrentCell Nota


Si 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. Nota El 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

IsCurrentCellInEditMode

FirstRow

FirstDisplayedScrollingRowIndex

Font FontBold FontItalic FontName FontSize FontStrikethrough FontUnderline

Font

ForeColor

ForeColor

Nota Las 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.

Nota Los 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. Nota Las 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.

HeadLines

No hay equivalente directo. Utilice la propiedad


WrapMode del objeto DataGridViewCellStyle en combinación con la propiedad ColumnHeadersHeight. Height

Height, heredada de la clase Control. Nota Las 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.

HelpContextID

Nueva implementación. Para obtener más información, vea Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0.

hWnd

Handle

hWndEditor

Nueva implementación. Utilice Handle.

Index

Nueva 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. Nota Las 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

MarqueeStyle

No hay equivalente directo. Utilice las propiedades SelectionMode, CellBorderStyle y Format.

RecordSelectors

RowHeadersVisible

Row

SelectedRows

RowDividerStyle

Propiedades GridColor, CellBorderStyle, RowHeadersBorderStyle, ColumnHeadersBorderStyle.

RowHeight

Height

SelBookmarks

Nueva implementación. Ahora se puede obtener acceso directamente a cualquier elemento.

SelEndCol

SelectedCells, SelectedColumns


SelStartCol SelLength

No hay equivalente directo. Utilice la propiedad SelectionLength en el controlador de eventos EditingControlShowing.

SelStart

No hay equivalente directo. Utilice la propiedad SelectionStart en el controlador de eventos EditingControlShowing.

SelText

No 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

StandardTab

Tag

Nueva implementación.

Text

CurrentCell.Value Nota La 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 Nota Las 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. Nota En 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. Método DisplayedRowCount.

VisibleRows

Nota En 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. WhatsThisHelpID

Nueva 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. Nota Las 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.

WrapCellPointer

Ya 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

CaptureImage

Nueva implementación. No se admite la captura del contenido de un control DataGridView a un control PictureBox.

ClearFields

Nueva implementación. Cuando se vuelve a enlazar, el formato de columna es automático.

ClearSelCols

ClearSelection

ColContaining

IndexOf (DataGridViewColumnCollection)

Drag

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

HoldFields

Nueva implementación. Se conserva el formato de la


columna al enlazar. Move

SetBounds, heredada de la clase Control. Nota Las 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

ShowWhatsThis Nueva implementación. Para obtener más información, vea Compatibilidad con la Ayuda para usuarios de Visual Basic 6.0. SplitContaining Nueva 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 2005

AfterColEdit

CellEndEdit

AfterColUpdate AfterDelete

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.

AfterUpdate

RowsAdded

BeforeColEdit

CellBeginEdit

BeforeColUpdate 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 Nota El 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

SelectedIndexChanged

ColEdit

CellBeginEdit

ColResize

ColumnWidthChanged

DblClick

CellMouseDoubleClick

DragDrop DragOver

Nueva implementación. Para obtener más información, vea Arrastrar y colocar para usuarios de Visual Basic 6.0.

Error

DataError

HeadClick

ColumnHeaderMouseClick

MouseDown

CellMouseDown

MouseMove

CellMouseMove

MouseUp

CellMouseUp

OLECompleteDrag Nueva implementación. Para obtener más información, OLEDragDrop vea Arrastrar y colocar para usuarios de Visual Basic OLEDragOver 6.0. OLEGiveFeedback OLESetData OLEStartDrag OnAddNew

RowsAdded

RowColChange

CurrentCellChanged

RowResize

RowHeightChanged

SelChange

SelectionChanged

SplitChange

Nueva implementación. No se admite la división de vistas directamente; utilice un control SplitContainer.

Validate

Validating


FUENTES DE DATOS PARA EL CONTROL DE DATAGRID Las fuentes de datos válidos para la DataGrid incluyen: • Clase DataTable • Clase DataView • Clase DataSet • Clase DataViewManager Si su fuente es un conjunto de datos, puede ser un objeto en el formulario o un objeto que se pasó al formulario a través de un servicio Web XML. Puede unir a los conjuntos de datos, ya sean escritos o no escritos. Puede unir a las siguientes estructuras si sus elementos exponen propiedades públicas: Cualquier componente que implemente la interfaz IList. Esto incluye: • Arreglos de una sola dimensión. • Cualquier componente que implemente la interfaz IListSource . • Cualquier componente que implemente la interfaz IBindingList. Un uso común del control de DataGrid es mostrar una sola tabla de datos desde un conjunto de datos. Sin embargo, también se puede utilizar el control para mostrar múltiples tablas, incluyendo tablas relacionadas. La presentación de la cuadrícula se ajusta automáticamente de acuerdo con la fuente de datos: • Tabla individual. La tabla aparece en una cuadrícula. • Tablas múltiples. La cuadrícula puede mostrar una vista de árbol en la que los usuarios pueden navegar para localizar la tabla que desean mostrar. Cuando el control de DataGrid muestra una tabla y la propiedad AllowSorting se configura a verdadero, los datos se pueden clasificar al hacer clic en los encabezados de la columna. El usuario también puede agregar filas y editar celdas. La relación entre un conjunto de tablas se muestra utilizando una estructura principal / secundaria de navegación. Las tablas principales son el nivel más alto de datos, y las tablas secundarias son aquellas tablas de datos que se derivan de los listados individuales en las tablas principales. Los expansores se muestran en cada fila principal que contenga una tabla secundaria. Al hacer clic en un ampliador, se genera una lista de vínculos tipo Web en las tablas secundarias, que cuando se seleccionan causan que las tablas secundarias aparezcan en pantalla. Al hacer clic en el icono "mostrar / ocultar las filas principales" ocultará la información acerca de la tabla principal (o causará que reaparezca si la ha ocultado previamente). Un botón hacia atrás permite la navegación inversa en la tabla vista previamente.


Algunas características del control de DataGrid, como colores, fuente de texto, alterar colores de fondo y propiedades de los datos, se puede formatear en el ambiente de diseño utilizando la ventana Propiedades. Están disponibles varias propiedades tales como CaptionForeColor, CaptionBackColor y CaptionFont. Columnas y filas Una DataGrid consiste en una colección de objetos DataGridTableStyle dentro de la propiedad TableStyles del control de DataGrid. Un estilo de tabla puede contener una colección de objetos DataGridColumnStyle incluidas en la propiedad GridColumnStyles del objeto DataGridTableStyle. Puede editar las

propiedades TableStyles y ColumnStyles con editores de colección a los que se accede a través de la ventana Propiedades. Cualquier objeto DataGridTableStyle asociado con el control de DataGrid puede ser accedido a través de GridTableStylesCollection. GridTableStylesCollection se puede editar en el diseñador con el Editor de la colección DataGridTableStyle, o de manera programática a través de la propiedad TableStyles del control de DataGrid, como se muestra en el ejemplo que se encuentra más abajo. Los estilos de la tabla y los estilos de la columna se sincronizan con los objetos DataTable y DataColumn al establecer sus propiedades MappingName en las propiedades TableName y ColumnName apropiadas. Cuando un objeto DataGridTableStyle sin estilos de columna se agrega a una unión de control DataGrid a una fuente de datos válida, y la propiedad MappingName del estilo


de la tabla se configura a una propiedad TableName válida, se crea una colección de objetos DataGridColumnStyle para ese estilo de tabla. Para cada objeto DataColumn que se encuentra en la colección Columnas del objeto DataTable, se agrega un objeto DataGridColumnStyle correspondiente al objeto GridColumnStylesCollection, al cual se accede a través de la propiedad GridColumnStyles del objeto DataGridTableStyle. Se pueden agregar o eliminar columnas de la cuadrícula utilizando el método Agregar o Eliminar en el objeto GridColumnStylesCollection. Una colección de tipos de columna extiende la clase DataGridColumnStyle con capacidades de formateo y edición enriquecidas. Todos los tipos de columna se heredan de la clase base DataGridColumnStyle. La clase que se crea depende de la propiedad DataType del objeto DataColumn en el cual se basa DataGridColumn. Por ejemplo, un objeto DataColumn con su propiedad DataType configurada a System.Boolean se asociará con DataGridBoolColumn. La siguiente tabla describe cada uno de estos tipos de columna. Acepta y muestra los datos como cadenas formateadas o no formateadas. DataGridTextBoxColumn Las capacidades de edición son las mismas a las que se utilizan para editar datos en un TextBox sencillo. Se hereda de DataGridColumnStyle. DataGridBoolColumn

Acepta y muestra valores verdaderos, falsos y nulos. Se hereda de DataGridColumnStyle.

Eventos ged surge cuando el usuario navega a una celda nueva. Cuando el usuario navega a una tabla nueva (a través de las relaciones principales / secundarias), el evento Navegar surge. El evento BackButtonClick surge cuando el Aparte de los eventos de control comunes como MouseDown, Intro y Desplazar, el control de DataGrid soporta los eventos asociados con la edición y navegación dentro de la cuadrícula. La propiedad CurrentCell determina cuál celda se selecciona. El evento CurrentCellChan usuario hace clic en el botón posterior cuando ve una tabla secundaria, y el evento ShowParentDetailsButtonClick surge cuando se hace clic en el icono "mostrar / ocultar filas principales"...ufff!!! interesantes verdad.. ?, me gustaría seguir pero ya tengo algo de sueño, le sugiero investigar al respecto, no hay remedio.


TODA ESTA INFORMACIÓN FUE EXTRAIDA DE VARIOS MANUALES CONSULTADAS EN INTERNET QUE ES LA FUENTE DE MAYOR INFORMACIÓN EN EL MUNDO ACTUAL Y DE IGUAL MANERA COMPLEMENTADO CON LOS CONOCIMIENTOS ADQUIRIDOS EN MI SALON DE CLASES. ESPERO QUE SEA DE UTILIDAD PARA CADA UNO DE USTEDES.


ALONZO SAJCHÉ MYNOR ROCAEL. 6to. Perito Contador con especialidad en computación. Chimaltenango 13 de mayo de año 2008.

“el que puede cambiar sus pensamientos puede cambiar su destino” Alonzo.


Manual de Flexgrid y Datagrid