none
thread y datagridview como parametro... RRS feed

  • Pregunta

  • saludos

    mi problema es el siguiente:

    He hecho un programa TPV (Terminal Punto de Venta) para la tienda de mi novia. En la pantalla principal tengo varios botones configurables con los productos de venta y un Datagridview donde se van añadiendo los productos que vendemos para hacer la suma total de la venta. También tenemos varios "label" con datos como la fecha, la hora y el número de ticket de venta. Este datagridview suele tener varias líneas cuando algún cliente lleva mas de un producto. Finalizada la venta, tenemos un botón "cobrar" que nos realiza una serie de operaciones, abrir el cajón portamonedas, guardar cada línea de venta en una tabla access, descontar el stock de cada línea en otra tabla access…. El caso es que hay varios accesos a tablas para guardar datos y/o actualizar registros. Este proceso se demora bastante, no se si debido a que alguna tabla de access tiene demasiado registros o simplemente por el proceso de acceder a la misma tabla… He intentado realizar el proceso de cobrar desdee otro hilo (toread), pero no se como pasar como parámetro el datagridview para que vaya cogiendo los datos a grabar. Tampoco se como pasar los datos de los label (fecha, hora, numero de ticket) que también los tiene que guardar en la tabla. cuando damos al boton cobrar tarda mucho en limpiar el datagridview y de mientras no se puede realizar otra marcación de venta..

    Private Sub B_cobrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_cobrar.Click
            If DataGridView1.Rows.Count > 0 Then
                temporizador2 = Stopwatch.StartNew()
                ''ejecutar lo necesario para CAJA.  abrir cajon
                abre_cajon()
    
                'GRABAR TICKET
                Dim Command As OleDbCommand
                Dim icount As Integer
                Dim SQLstr As String
                Dim a1, a2, a3 As String
                a1 = "'" + Label2.Text + "'" 'fecha
                a2 = "'" + Label4.Text + "'" ' hora
                a3 = "'" + Label8.Text + "'"  'cod_ticket
                For xx As Integer = 0 To DataGridView1.Rows.Count - 1
                    Dim a4, a5, a6, a7, a8, a9, a10, a11, a12 As String
                    Dim f1 As String = ""
                    'a4 = "'" + DataGridView1.Rows(xx).Cells(0).Value + "'" 'cantidad
                    a4 = "'" + DataGridView1.Rows(xx).Cells("cantidad").Value.ToString + "'"  'cantidad
                    a5 = "'" + DataGridView1.Rows(xx).Cells("codigo").Value.ToString + "'" 'cod_articulo
                    a6 = "'" + DataGridView1.Rows(xx).Cells("punit").Value.ToString + "'"  'precio
                    a7 = "'" + DataGridView1.Rows(xx).Cells("subtotal").Value.ToString + "'"  'subtotal
                    a9 = "true" 'activado"
                    a10 = "'" + DataGridView1.Rows(xx).Cells("numero").Value + "'" 'numero
                    a11 = "'" + DataGridView1.Rows(xx).Cells("codextra").Value.ToString + "'"  'codd_extra
                    a12 = "'" + DataGridView1.Rows(xx).Cells("cod_familia").Value.ToString + "'" 'codigo familia
                    Try
                        conexion_ezpelabarri.Open()
                        a8 = "true" 'pagado
                        '                               a1    a2        a3       a4         a5        a6     a7     a8   a9  
                        SQLstr = "INSERT INTO salidas(fecha,hora,cod_ticket,cantidad,cod_articulo,precio,subtotal,pagado,activado,numero,cod_extras,cod_familia,fecha_pago) VALUES(" & a1 & "," & a2 & "," & a3 & "," & a4 & "," & a5 & "," & a6 & "," & a7 & "," & a8 & "," & a9 & "," & a10 & "," & a11 & "," & a12 & "," & a1 & ")"
                        Command = New OleDbCommand(SQLstr, conexion_ezpelabarri)
                        icount = Command.ExecuteNonQuery
                    Catch ex As Exception
                        MsgBox("No se ha podido grabar")
                    End Try
                    conexion_ezpelabarri.Close()
                    'STOCK
                    If DataGridView1.Rows(xx).Cells("numero").Value = "" Then
                        resta_articulos(CInt(DataGridView1.Rows(xx).Cells("codigo").Value), CInt(DataGridView1.Rows(xx).Cells("cantidad").Value))
                    Else
                        If DataGridView1.Rows(xx).Cells("codextra").Value <> 0 Then
                            resta_extras(CInt(DataGridView1.Rows(xx).Cells("codigo").Value), DataGridView1.Rows(xx).Cells("numero").Value, CInt(DataGridView1.Rows(xx).Cells("codextra").Value), CInt(DataGridView1.Rows(xx).Cells("cantidad").Value))
                        Else
                            resta_numeros(CInt(DataGridView1.Rows(xx).Cells("codigo").Value), DataGridView1.Rows(xx).Cells("numero").Value, CInt(DataGridView1.Rows(xx).Cells("cantidad").Value))
                        End If
                    End If
                Next
    
    
                ' FIN DE GRABACION DE TICKET
                DataGridView1.Rows.Clear()
                TextBox2.Text = ""
                Label11.Text = Format(Total_ticket, "##,##0.00") + " .-€"
                Total_ticket = 0
                Label8.Text = ticket_nuevo()
                Label15.Text = ""
                
                TextBox2.Text = Format(Total_ticket, "##,##0.00") & " €"
    
            End If
    
    
            Label16.Text = temporizador2.Elapsed.ToString()
        End Sub

    como podria hacer esto en un hilo... o que fuera mas rápido....

    gracias

    • Cambiado Enrique M. Montejo jueves, 10 de julio de 2014 12:02 Pregunta relacionada con controles de Windows Forms.
    sábado, 17 de agosto de 2013 7:43