none
MshFlexGrid RRS feed

  • Pregunta

  • Hola a todos una consulta tengo un formulario donde ingreso items a una grilla la cual tiene un titulo se lo pongo en el load pero cuando carga me carga el titulo y un registro vacío. ¿Como puedo hacer para que me cargue solo el titulo y no el registro vacío les muestro el código:

    With flex
        .Clear
        Encabezado = "<Código|<Nombre|<Descripción|<Obs|>Precio|>Cantidad|>Total"
        .FormatString = Encabezado
        .Row = 0
        .ColWidth(0) = 700
        .ColWidth(1) = 1200
        .ColWidth(2) = 2000
        .ColWidth(3) = 2000
        .ColWidth(4) = 900
        .ColWidth(5) = 900
        .ColWidth(6) = 900
      End With

    Pedro Avila


    • Editado Pedro Ávila miércoles, 20 de junio de 2012 16:54 faltaba datos
    miércoles, 20 de junio de 2012 16:53

Respuestas

  • Hola

    Hay alguna columna de la grilla que siempre tiene que tener datos, por ejemplo el campo código si hay datos en una fila la columna código estará siempre llena, en ese caso lo único que tienes que hacer es comprobar que la columna código de la primera fila si esta llena o vacía




    • Editado ToniAG miércoles, 20 de junio de 2012 22:13
    • Marcado como respuesta Pedro Ávila miércoles, 20 de junio de 2012 22:24
    miércoles, 20 de junio de 2012 22:11
  •    Private Sub btnEliminar_Click()
            Dim tPagar As Double
            Dim I As Integer
    
            With flex
    
                ' la tabla esta vacia, salimos sin hacer nada
                If .TextMatrix(1, 1) = "" Then Exit Sub
                
                ' No hay ningula fila seleccionada salimos
                If .Row < 1 Then Exit Sub
                
                If .Rows = 2 Then
                    .Rows = .Rows + 1
                    Lleno = False
                End If
    
                .RemoveItem (.Row)
                'RESTAR(VUELVO A SUMAR)
                
                ' la tabla esta vacia, volvemos a velificar una vez eliminado si la tabla esta vacia
                If .TextMatrix(1, 1) = "" Then
                    txtTotalPagar.Text = ""
                    Exit Sub
                End If
    
                For I = 1 To .Rows - 1
                    tPagar = tPagar + .TextMatrix(I, 6)
                Next
                txtTotalPagar.Text = Format(tPagar, "#,##0.00") '<= asi es correcto
            End With
        End Sub

    • Marcado como respuesta Pedro Ávila jueves, 21 de junio de 2012 0:00
    miércoles, 20 de junio de 2012 23:46

Todas las respuestas

  • ¿Tienes la propiedad Allowaddnew = True?


    Saludos, Javier J

    miércoles, 20 de junio de 2012 17:07
  • Estoy usando mshflexgrid la propiedad que me pones no lo encuentro

    Pedro Avila

    miércoles, 20 de junio de 2012 17:10
  • Creo que no se puede, si estableces una fila fija, como mínimo tiene que haber una fila vacía o llena.

    Podrías hacer lo siguiente, cuando tengas una sola fila y esta vacía ocultarla, dándole una altura de 0 (cero)

    MSHFlexGrid1.RowHeight(1) = 0

    y cuando agregues datos estableces la altura a la fila



    • Editado ToniAG miércoles, 20 de junio de 2012 18:12
    miércoles, 20 de junio de 2012 17:54
  • Hola toni, lo que quiero hace es validar la grilla entonces como haría para saber que la grilla esta vacía ya sea un registro vacío pero para validar si esta vacío que no guarde todo los datos que esta en el form

    If flex.Row = 0 Then
        MsgBox "No puede registrar si no hay items", vbInformation, App.Title
        Exit Sub
    End If

    Esta no me sirve pq? hay ya un registro vacío pero hay como decir que si esta vacía la primera fila que no guarde 


    Pedro Avila


    • Editado Pedro Ávila miércoles, 20 de junio de 2012 22:07 faltaba datos
    miércoles, 20 de junio de 2012 21:58
  • Hola

    Hay alguna columna de la grilla que siempre tiene que tener datos, por ejemplo el campo código si hay datos en una fila la columna código estará siempre llena, en ese caso lo único que tienes que hacer es comprobar que la columna código de la primera fila si esta llena o vacía




    • Editado ToniAG miércoles, 20 de junio de 2012 22:13
    • Marcado como respuesta Pedro Ávila miércoles, 20 de junio de 2012 22:24
    miércoles, 20 de junio de 2012 22:11
  • If flex.TextMatrix(1, 1) = "" Then
        MsgBox "No puede registrar si no hay items", vbInformation, App.Title
        Exit Sub
     End If

    Gracias Toni


    Pedro Avila


    • Editado Pedro Ávila miércoles, 20 de junio de 2012 22:25 faltaba
    miércoles, 20 de junio de 2012 22:25
  • Toni una consulta cuando elimino me da error cuando la fila esta vacía pq? sumaria y no hay datos pq el registro esta vacío pero lo soluciono con esto   If .TextMatrix(1, 1) = "" Then Exit Sub

    Private Sub btnEliminar_Click()
      Dim tPagar As Double
      Dim I As Integer

      With flex
        If .Rows = 2 Then
          .Rows = .Rows + 1
          Lleno = False
        End If
     
        If .Row > 0 Then .RemoveItem (.Row)
        'RESTAR(VUELVO A SUMAR)
        If .TextMatrix(1, 1) = "" Then Exit Sub  =>PARA QUE NO SUME SI ESTA VACIO CUANDO ELIMINO pero en la segunda vez que apreto eliminar si lo borra donde ubicaria este linea de codigo para que borre en la primera vez que apreto eliminar

        For I = 1 To .Rows - 1
          tPagar = tPagar + .TextMatrix(I, 6)
        Next
        txtTotalPagar.Text = tPagar
        txtTotalPagar.Text = Format(tPagar, "##,###,###0.00")
      End With
    End Sub

           

    Pedro Avila

    miércoles, 20 de junio de 2012 22:54
  • Hola

    Private Sub btnEliminar_Click() Dim tPagar As Double Dim I As Integer With flex ' la tabla esta vacia, salimos sin hacer nada If .TextMatrix(1, 1) = "" Then Exit Sub

    ' No hay ningula fila seleccionada salimos
    If .Row < 1 Then Exit sub

    If .Rows = 2 Then .Rows = .Rows + 1 Lleno = False End If .RemoveItem(.Row) 'RESTAR(VUELVO A SUMAR) For I = 1 To .Rows - 1 tPagar = tPagar + .TextMatrix(I, 6) Next 'txtTotalPagar.Text = tPagar '<= esta linea la puede eliminar, la tienes abajo txtTotalPagar.Text = Format(tPagar, "#,##0.00") '<= asi es correcto End With End Sub



    • Editado ToniAG miércoles, 20 de junio de 2012 23:28
    miércoles, 20 de junio de 2012 23:15
  •              

    Private Sub btnEliminar_Click()
      Dim tPagar As Double
      Dim I As Integer

      With flex
        If .TextMatrix(1, 1) = "" Then Exit Sub
        If .Rows = 2 Then
          .Rows = .Rows + 1
          Lleno = False
        End If

        If .Row > 0 Then .RemoveItem (.Row)
        'RESTAR(VUELVO A SUMAR)

        For I = 1 To .Rows - 1
          tPagar = tPagar + .TextMatrix(I, 6) ==> ERROR cuando elimino un registro pq? suma y no hay nada por eso ponía( If .TextMatrix(1, 1) = "" Then Exit Sub) antes del FOR
        Next
        txtTotalPagar.Text = Format(tPagar, "##,###,###0.00")
      End With
    End Sub

    Ese error es cuando ingreso datos en el primer registro cuando lo elimino alli el problema pero cuando esta vacío y lo elimino no hay problema


    Pedro Avila



    • Editado Pedro Ávila miércoles, 20 de junio de 2012 23:32 faltaba datos
    miércoles, 20 de junio de 2012 23:30
  • Hola

    Private Sub btnEliminar_Click() Dim tPagar As Double Dim I As Integer With flex ' la tabla esta vacia, salimos sin hacer nada If .TextMatrix(1, 1) = "" Then Exit Sub

    ' No hay ningula fila seleccionada salimos
    If .Row < 1 Then Exit sub

    If .Rows = 2 Then .Rows = .Rows + 1 Lleno = False End If .RemoveItem(.Row) 'RESTAR(VUELVO A SUMAR) For I = 1 To .Rows - 1 tPagar = tPagar + .TextMatrix(I, 6) Next 'txtTotalPagar.Text = tPagar '<= esta linea la puede eliminar, la tienes abajo txtTotalPagar.Text = Format(tPagar, "#,##0.00") '<= asi es correcto End With End Sub

    no se si el causante es esta linea  If .Row > 0 Then .RemoveItem (.Row)

    prueba como lo e montado

    miércoles, 20 de junio de 2012 23:35
  • Sigue saliendo el error en el mismo sitio

    Private Sub btnEliminar_Click()
      Dim tPagar As Double
      Dim I As Integer
      
      With flex
        If .TextMatrix(1, 1) = "" Then Exit Sub
        If .Row < 1 Then Exit Sub
        If .Rows = 2 Then
          .Rows = .Rows + 1
          Lleno = False
        End If
         
        .RemoveItem (.Row)
        'RESTAR(VUELVO A SUMAR)
        
        For I = 1 To .Rows - 1
          tPagar = tPagar + .TextMatrix(I, 6) ==> ERROR NO COINCIDEN LOS TIPOS
        Next
        txtTotalPagar.Text = Format(tPagar, "#,##0.00")
      End With
    End Sub


    Pedro Avila

    miércoles, 20 de junio de 2012 23:44
  •    Private Sub btnEliminar_Click()
            Dim tPagar As Double
            Dim I As Integer
    
            With flex
    
                ' la tabla esta vacia, salimos sin hacer nada
                If .TextMatrix(1, 1) = "" Then Exit Sub
                
                ' No hay ningula fila seleccionada salimos
                If .Row < 1 Then Exit Sub
                
                If .Rows = 2 Then
                    .Rows = .Rows + 1
                    Lleno = False
                End If
    
                .RemoveItem (.Row)
                'RESTAR(VUELVO A SUMAR)
                
                ' la tabla esta vacia, volvemos a velificar una vez eliminado si la tabla esta vacia
                If .TextMatrix(1, 1) = "" Then
                    txtTotalPagar.Text = ""
                    Exit Sub
                End If
    
                For I = 1 To .Rows - 1
                    tPagar = tPagar + .TextMatrix(I, 6)
                Next
                txtTotalPagar.Text = Format(tPagar, "#,##0.00") '<= asi es correcto
            End With
        End Sub

    • Marcado como respuesta Pedro Ávila jueves, 21 de junio de 2012 0:00
    miércoles, 20 de junio de 2012 23:46
  • Parece que hemos vuelto al principio, si no funciona, explicame mejor que es lo que sucede, que error te da
    miércoles, 20 de junio de 2012 23:49
  • Por el error de no coincide los tipos puedes hacer esto

    ' la cadena te la convierte en numero, si la cadena es un texto o esta vacia te devolvera 0
     tPagar = tPagar + Val(.TextMatrix(I, 6))

    Nota   La función Val sólo reconoce el punto
    (.) como separador decimal válido. Cuando se utilizan separadores
    decimales diferentes, como en aplicaciones internacionales, debe utilizar
    CDbl para convertir una cadena a un número.



    • Editado ToniAG miércoles, 20 de junio de 2012 23:57
    miércoles, 20 de junio de 2012 23:51
  • Private Sub btnEliminar_Click()
      Dim tPagar As Double
      Dim I As Integer

      With flex
        If .TextMatrix(1, 1) = "" Then Exit Sub
        If .Row < 1 Then Exit Sub
        If .Rows = 2 Then
          .Rows = .Rows + 1
          Lleno = False
        End If

        .RemoveItem (.Row)
        'RESTAR(VUELVO A SUMAR)
        If .TextMatrix(1, 1) = "" Then ==>  todo esta exelente pq? si elimino ya no debe ir al FOR debe salir y con esto esta bien te iba a decir que deberiamos de salir si ya elimino
          txtTotalPagar.Text = "" ==> Esto te lo iba a decir pero no te lo dije para no confundirte me leistes la mente
          Exit Sub
        End If

        For I = 1 To .Rows - 1
          tPagar = tPagar + .TextMatrix(I, 6)
        Next
        txtTotalPagar.Text = Format(tPagar, "#,##0.00")
      End With
    End Sub

    Gracias totales

               

    Pedro Avila

    jueves, 21 de junio de 2012 0:00
  • Me alegro, ibas bien encaminado, solo te falto un detalle pero seguro que lo hubieras sacado

    Saludos



    • Editado ToniAG jueves, 21 de junio de 2012 0:08
    jueves, 21 de junio de 2012 0:05
  • Toni estoy desarrollando un sistema para recepcionar equipos de informatica(impresoras, cpu, laptop, etc) para un servicio tecnico ellos tienen su sistema que se encarga de las ventas y todo yo solo estoy haciendo para registrar los equipos que vienen a soporte técnico me gustaría mandarte la db que la tengo en access ya que es algo pequeño  y el código para poder consultarte algunas ideas y dudas que tengo en mente

    En el sistema recepcionan el equipo y se pone si es para formatear, garantía o cualquier averia que presente y costo por la compostura ya que el pago lo hacen con el sistema que ellos manejan solo aqui cuando imprima ellos se fijan cuanto se esta cobrando por dicha compostura.

    NOTA: puedes enviarme tu correo


    Pedro Avila



    • Editado Pedro Ávila jueves, 21 de junio de 2012 0:25 faltaba datos
    jueves, 21 de junio de 2012 0:12
  • Pero este foro esta para eso, aquí tienes a tu disposición a mucha gente que puede solucionarte tus dudas. Veré que puedo hacer


    • Editado ToniAG jueves, 21 de junio de 2012 13:30
    jueves, 21 de junio de 2012 0:30
  • Es que mi consulta es sobre db, si me defiendo en db la modelo con Erwin o PowerDesigner si no que tengo una duda en unas tablas(Entidades)

    Gracias por tu apoyo


    Pedro Avila


    • Editado Pedro Ávila jueves, 21 de junio de 2012 0:34 faltaba datos
    jueves, 21 de junio de 2012 0:33
  •    Private Sub btnEliminar_Click()
            Dim tPagar As Double
            Dim I As Integer
    
            With flex
    
                ' la tabla esta vacia, salimos sin hacer nada
                If .TextMatrix(1, 1) = "" Then Exit Sub
                
                ' No hay ningula fila seleccionada salimos
                If .Row < 1 Then Exit Sub
                
                If .Rows = 2 Then
                    .Rows = .Rows + 1
                    Lleno = False
                End If
    
                .RemoveItem (.Row)
                'RESTAR(VUELVO A SUMAR)
                
                ' la tabla esta vacia, volvemos a velificar una vez eliminado si la tabla esta vacia
                If .TextMatrix(1, 1) = "" Then
                    txtTotalPagar.Text = ""
                    Exit Sub
                End If
    
                For I = 1 To .Rows - 1
                    tPagar = tPagar + .TextMatrix(I, 6)
                Next
                txtTotalPagar.Text = Format(tPagar, "#,##0.00") '<= asi es correcto
            End With
        End Sub

    HOLA QUE TAL... TENGO UNA FALLA EN MI PROGRAMACION HACERCA DEL FLEXGRID ESPERO ME AYUDEN

    TENGO UN FLEXGRID QUE EN LA COLUMNA 7 ESTA EL CAMPO SUBTOTAL....

    For j = 1 To MSHFlexGrid1.Rows - 1
                 subtot = subtot + CDbl(MSHFlexGrid1.TextMatrix(j, 7))

         'subtot = subtot + Format$(MSHFlexGrid1.TextMatrix(j, 7),"##0.00")

    Next j

    txtcancelado = subtot  ...

    al momentos de sumar,si es que tengo un producto de 2.35 me devuelve 235 en el textbox... intente hacer todas las pruebas posible y nada creo  que al momento de sumar elimina el punto o coma y le muestra en entero.. y no se como hacer... pero antes probe con este codigo si me devuelve los numeros decimales

    txtcancelado = MSHFlexGrid1.TextMatrix(j, 7)

    cuando hago esto si me muestra el numero real si es 2.35 me muestra 2.35.... por eso digo que al momento de sumar es donde lo hace 235 ...espero su ayuda gracias

    miércoles, 27 de agosto de 2014 18:08