1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda Urgente vb.net

Discussão em 'Programação' iniciada por Ketra, 24 de Julho de 2008. (Respostas: 6; Visualizações: 1415)

  1. 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: 24 de Julho de 2008
  2. iznougud

    iznougud I quit My Job for Folding

    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: 24 de Julho de 2008
  3. não percebo bem como posso utilizar esse código aqui :S
     
  4. jpaulino

    jpaulino Power Member

    Está dificil de entender ... então sempre que queres inserir um produto defines o nome das colunas, fazes uma série de contas e que pesquisa é essa ?

    Podes ver um exemplo de como fazer uma pesquisa aqui: VB.NET: Utilizando o controlo DataGridView
     
  5. já vi esse exemplo... bem de qualquer forma isto eu ja resolvi, o meu problema é agora gravar todos os dados que estão na datagridview para a base de dados...
     
  6. jpaulino

    jpaulino Power Member

    Mas no exemplo que te mostrei vem lá a explicar isso !!!
     
  7. alfinete

    alfinete Power Member

    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
     

Partilhar esta Página