Recorrer mshflegrid y seleccionar fila

¿Me podrían ayudar con un problemita?
Mira.. Necesito hacer un modulo de inventario, donde tecleo el nombre de producto en un text y al dar enter
en un grid me despliegue la existencia de ese producto hasta ahí bien todo utilizo vb6 los datos los traigo de una consulta en un textbox, al darle enter me llena el mshflexgrid con los registros de ese código.. Entonces al leer el código de barras en otro textbox me recorra el mshflexgrid en busca del id ( código barras) si lo encuentra que me pinte la fila o seleccione, o algo que me indique que la encontró, también puede ser que las vaya borrando, en fin puede ser de varias maneras.. Y al final de mis lecturas si una fila no se pinto . O selecciono.. Eso quiere decir que me falto por inventariar..
Lo del checkbox en el gris lo descarto.. ¿o cómo vez? ¿Es más practico?
Espero su pronta ayuda con un código de ejemplo.. En serio que me gusta programar pero si apenas estoy enmpezando

1 Respuesta

Respuesta
1
Aquí te envío un código que te permite buscar y eliminar la fila si es que la encuentra.
Espero que te sirva.
Saludos
'Tienes que seleccionar el evento, procedimiento o función en que lo colocarás

Dim blnExito As Boolean
    blnExito = False


    'Recorremos el grid
    'Asumo que la primera fila es fija (tiene los encabezados)
    For i = 1 To Me.grdProductos.Rows - 1
        'Suponiendo que en la columna 0 está el código
'y tengo un campo txtCodigo en que está el código que busco
        'Consulto si el códigos el que busco
        '(i: Fila; 0: La columna que contiene el código)
        If Me.grdProductos.TextMatrix(i, 0) = Me.txtCodigo.Text Then
            'Si deseas eliminarlo
            ''Este if permite eliminar la última fila no fija
            'ya que el flex no permite removerla de la forma normal
            If Me.grdProductos.Rows > 1 Then
                Me.grdProductos.RemoveItem i
            Else
                Me.grdProductos.Rows = 1
            End If
            blnExito = True   'Indicar que fue encontrado
            Exit For               'Romper el ciclo
        End If
    Next
Este es mi código.. el id esta en la columna 1 y si efectivamente si funciona..
Ahora que se lo enseñe a mi jefe, me pide que haga otro form con lo mismo pero
ahora colorear la fila,, no eliminarla,, en fin es el jefe.. ¿me podrías ayudar ahora como
coloreo la fila?
Private Sub TXTLEER_KeyPress(KeyAscii As Integer)
Dim blnExito As Boolean
  If KeyAscii = 13 Then
    blnExito = False
    'Recorremos el grid
    'Asumo que la primera fila es fija (tiene los encabezados)
    For I = 1 To Me.GRIDINVENTA.Rows - 1
        'Suponiendo que en la columna 0 está el código
'y tengo un campo txtCodigo en que está el código que busco
        'Consulto si el códigos el que busco
        '(i: Fila; 0: La columna que contiene el código)
        If Me.GRIDINVENTA.TextMatrix(I, 1) = Me.TXTLEER.Text Then
            'Si deseas eliminarlo
            ''Este if permite eliminar la última fila no fija
            'ya que el flex no permite removerla de la forma normal
            If Me.GRIDINVENTA.Rows > 1 Then
                Me.GRIDINVENTA.RemoveItem I
            Else
                Me.GRIDINVENTA.Rows = 1
            End If
            blnExito = True   'Indicar que fue encontrado
            Exit For               'Romper el ciclo
        End If
    Next
  End If
End Sub
No sé si se puede colorear la fila entera, pero yo la coloreo de esta forma
Public Sub subCambioColorFila(flex As MSFlexGrid, intFila As Integer, colorFila, colorTexto)
    For i = 0 To flex.Cols - 1
        flex.CellBackColor = colorFila
        flex.CellForeColor = colorTexto
    Next
End Sub

Luego utilizamos la función en tu código
Private Sub TXTLEER_KeyPress(KeyAscii As Integer)
Dim blnExito As Boolean
  If KeyAscii = 13 Then
    blnExito = False
    'Recorremos el grid
    'Asumo que la primera fila es fija (tiene los encabezados)
    For I = 1 To Me.GRIDINVENTA.Rows - 1
        'Suponiendo que en la columna 0 está el código
'y tengo un campo txtCodigo en que está el código que busco
        'Consulto si el códigos el que busco
        '(i: Fila; 0: La columna que contiene el código)
        If Me.GRIDINVENTA.TextMatrix(I, 1) = Me.TXTLEER.Text Then
            'Si deseas colorear (fondo rojo, letras blacas)        
            subCambioColorFila Me.GRIDINVENTA, i, &HFF, &HFFFFFF&
            blnExito = True   'Indicar que fue encontrado
            Exit For               'Romper el ciclo
        End If
    Next
  End If
End Sub
Perdón, corrijo la función
Public Sub subCambioColorFila(flex As MSFlexGrid, intFila As Integer, colorFila, colorTexto)
    flex.Row = intFila
    For i = 0 To flex.Cols - 1
        flex.Col = i
        flex.CellBackColor = colorFila
        flex.CellForeColor = colorTexto
    Next
End Sub

Se me había olvidado posicionar la fila y la columna. Ahora tiene que funcionar.

Me marca error en la llamada de la función
subcambiocolorfila me. gridinventa, "I" (aca me marca el error en la variable I) &fff,&hfffff&
" El tipo de argumento byref no coincide"
que sera.. ¿me ayudas?
Puedes hacer dos cosas
Definir la variable i antes de llamar a la función
                Dim i as integer
O quitarle el tipo al parámetro intFila en la declaracion de la funcion
en lugar de
Public Sub subCambioColorFila(flex As MSFlexGrid, intFila As Integer, colorFila, colorTexto)
poner
Public Sub subCambioColorFila(flex As MSFlexGrid, intFila, colorFila, colorTexto)
Cualquiera de las dos va a funcionar.
Como recomendación para evitar ese error en el futuro, te sugiero utilizar, como primera línea de código en cada formulario o módulo
Option Explicit
Esto te obliga a declarar cada variable antes de ser utilizada.
Ya hice todo lo que me sugieres y ahora me marca error 13 no coinciden los tipos
en la llamada de la función
subCambioColorFila Me. GRIDINVENTA, I, &HFF, &HFFFFFF
option explicit
dim I as integer
Private Sub TXTLEER_KeyPress(KeyAscii As Integer)
Dim blnExito As Boolean
  If KeyAscii = 13 Then
    blnExito = False
    'Recorremos el grid
    'Asumo que la primera fila es fija (tiene los encabezados)
    For I = 1 To Me.GRIDINVENTA.Rows - 1
        'Suponiendo que en la columna 0 está el código
'y tengo un campo txtCodigo en que está el código que busco
        'Consulto si el códigos el que busco
        '(i: Fila; 0: La columna que contiene el código)
        If Me.GRIDINVENTA.TextMatrix(I, 1) = Me.TXTLEER.Text Then
            'Si deseas colorear (fondo rojo, letras blacas)
            subCambioColorFila Me.GRIDINVENTA, I, &HFF, &HFFFFFF
            blnExito = True   'Indicar que fue encontrado
            Exit For               'Romper el ciclo
        End If
    Next
 '  End If
  End If
End Sub
Public Sub subCambioColorFila(flex As MSFlexGrid, intFila As Integer, colorFila, colorTexto)
    flex.Row = intFila
    For I = 0 To flex.Cols - 1
        flex.Col = I
        flex.CellBackColor = colorFila
        flex.CellForeColor = colorTexto
    Next
End Sub
Ya quedo mi hermano... falta de observación la mía..
Era en el sub estaba como flex cuando me grid se llama gridinventa
ahí detalle..
Eres grande mi cuate!
Espero sigas apoyando en este foro !
Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas