Ajuda Urgente vb.net

Ketra

Membro
Boa tarde, será que alguém me pode dar uma ajudinha? Estou a desenvolver um FrontOffice de uma frutaria em vb.net e a minha ideia é ao clicar mais do que uma vez no mesmo produto ele em vez de fazer:

banana 1 1€
banana 1 1€
banana 1 1€


faz:


bananas 3 3€



o que eu quero que faça é o que indica o segundo output, e para tal uso o seguinte código:



Código
GeSHi (vbnet):
Código:
   Sub ObterPrecoDaDesignacao(ByVal design As String)
        Dim preco As String = ""
 
        Dim sql1 As String = "Select PrecoCIva from Produtos Where Designacao = '" & design & "' "
 
        Dim strConn As String = My.Settings.frutariaaConnectionString1
        Dim con As New SqlConnection
        con.ConnectionString = strConn
        con.Open()
 
        Dim cmd As SqlCommand = New SqlCommand
 
        cmd.Connection = con
        cmd.CommandType = CommandType.Text
        cmd.CommandText = sql1
 
        Dim rdr As SqlDataReader
        rdr = cmd.ExecuteReader
        While (rdr.Read())
            preco = CStr(rdr.GetValue(0))
        End While
 
        rdr.Close()
        con.Close()
 
        ' Create an unbound DataGridView by declaring a column count.
        DataGridView1.ColumnCount = 3
        DataGridView1.ColumnHeadersVisible = True
 
        ' Set the column header names.
        DataGridView1.Columns(0).Name = "Designação"
        DataGridView1.Columns(1).Name = "Quant"
        DataGridView1.Columns(2).Name = "Preço"
 
        ' Populate the rows.
        Dim row1() As String = {design, "1", preco}
        Dim rows() As Object = {row1}
 
        Dim rowArray As String()
 
 
 
        Dim encontrou As Boolean = False
        Dim i As Integer = 0
        Dim soma As Integer = 0


        For Each rowArray In rows
            'For Each col As DataGridViewRow In DataGridView1.Rows
            If DataGridView1.RowCount > 0 Then
                For i = 0 To DataGridView1.RowCount - 1
                    If rowArray(0) = DataGridView1.SelectedRows.Item(i).Cells(0).Value Then
                        DataGridView1.SelectedRows.Item(i).Cells(1).Value += 1
                        If (DataGridView1.SelectedRows.Item(i).Cells(2).Value <> "" And rowArray(1) <> "") Then
                            soma = CInt(DataGridView1.SelectedRows.Item(i).Cells(2).Value) + CInt(rowArray(1))
                            DataGridView1.SelectedRows.Item(i).Cells(2).Value = soma
                        End If

                       encontrou = True
                    Else

                        encontrou = False
                    End If

                Next i
            End If
            If Not (encontrou) Then
                DataGridView1.Rows.Add(rowArray)
                DataGridView1.Refresh()
            End If
        Next rowArray



O que acontece neste código é que ele na primeira linha da datagridview acrescenta-me por até 2 vezes o produto, ou seja se eu clicar 2 vezes em bananas aparece

Bananas 2 2€

e depois se eu quiser acrescentar outro produto 2 vezes, por exemplo morangos, fica:

Bananas 2 2€
Morangos 1 1

Morangos 1 1€

e quando eu clico para adicionar novamente morangos ele dá-me o seguinte erro:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

este erro dá-me se eu tentar introduzir os morangos mais do que uma vez.

se tentar inserir as bananas mais uma vez, ele dá-me o seguinte erro:

Conversion from string "" to type 'Double' is not valid.

ele também não está a somar devidamente os preços...

As bananas e os morangos eram só um exemplo para me explicar melhor, o problema não está nos botões que clico...

Precisava de ajuda urgentemente, isto é para apresentar perante um juri amanhã :(

se alguém me puder ajudar, agradeço imenso..
 
Última edição pelo moderador:
Ja reparei que quando fazes um ForEach e mudas o valor de alguma coisa ele nao actualiza...
Normalmente quando quero mudar alguma coisa faço:

Código:
dim row as datarow

For x as integer = 0 to rows.count - 1 

row = rows(x)

row("campo") = xpto

rows(x) = row

Next
 
Última edição pelo moderador:
o mais seguro neste caso , é a medida que actualizas a grid com os valores, vais guardando isso numa classe de perssistencia de dados , depois quando for a gravar na bd puchas esses dados para a tua tabela, acho que assim é mais seguro...

acho eu
 
Back
Topo