• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Luis Marques

Enviar dados de uma datagrid para outra datagrid

23 mensagens neste tópico

É assim eu queria enviar um dado de uma datagrid para outra datagrid, num campo especifico,alguem me pode ajudar

Eu enviar de uma datagrid para uma textbox,etc sei fazer, mas neste caso nao sei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um dado!!

Entao se sabes passar para uma textbox presumo que saibas ir buscar o dado logo adicionas esse dado no datatable ou dataset da segunda grid e voltas a fazer o databind... tens duvidas em que parte?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho este codigo para quando faço doble click na primeira datagrid:

 

  Private Sub DataGridView1_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick

        nome_produto = DataGridView1.Rows(e.RowIndex).Cells(1).Value
        tipopapel = DataGridView1.Rows(e.RowIndex).Cells(2).Value
        formato = DataGridView1.Rows(e.RowIndex).Cells(3).Value
        corpapel = DataGridView1.Rows(e.RowIndex).Cells(4).Value
        corimpressao = DataGridView1.Rows(e.RowIndex).Cells(5).Value
        preco = DataGridView1.Rows(e.RowIndex).Cells(6).Value
        id_produto = DataGridView1.Rows(e.RowIndex).Cells(0).Value


        Form11.Alterar(id_produto)
        Me.Close()

    End Sub

Depois na segunda datagrid tenho este código:

 

 Sub Alterar( id_produto As Integer)

        'id_produtoTextBox.DataBindings.Clear()
        'Nome_produtoTextBox.DataBindings.Clear()
        'TipopapelTextBox.DataBindings.Clear()
        'FormatoTextBox.DataBindings.Clear()
        'CorpapelTextBox.DataBindings.Clear()
        'CorimpressaoTextBox.DataBindings.Clear()
        'PrecoTextBox.DataBindings.Clear()
        'TextBox1.DataBindings.Clear()


        'Nome_produtoTextBox.Text = Nothing
        'TipopapelTextBox.Text = Nothing
        'FormatoTextBox.Text = Nothing
        'CorpapelTextBox.Text = Nothing
        'CorimpressaoTextBox.Text = Nothing
        'PrecoTextBox.Text = Nothing
        'TextBox1.Text = Nothing


        DataGridView2.Rows(0).Cells(3).Value = id_produto

        Me.Show()

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou seja as grids estao em forms difrentes ne?

Ele nao altera o valor e aparece sempre com o valor normal correcto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim estao em forms diferentes e quando clico num registo na primeia form dame um erro nesta linha da 2 datagrid:

DataGridView2.Rows(0).Cells(3).Value = id_produto

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro... embora a grid la esteja ainda nao foi preenchida logo nao existe qualquer valor a ser alterado na segunda grid :)

vais ter de guardar esse valor de forma a que no Form_Load depois de prencher a grid ele va alterar esse valor :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Provavelmente inicias-te o Form desta maneira:

Dim frm as New Form11()

Ou seja o que aconteceu foi que a class Form11 foi inicializada mas no entanto todos os seus controlos e variaveis encontram-se vazios...

Logo dá erro quando tu tentas atribuir á datagrid como demonstras-te e passo a copiar:

DataGridView2.Rows(0).Cells(3).Value = id_produto

Porque? porque como te disse os controlos estão vazios... por preencher a tua datagrid ainda nao contem valores, logo automaticamente a celula 3 não existe, dai o erro que tives-te:

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

Ou seja tem de ser positivo e menor que o tamanho da colecção, se a colecção é 0 o 3 não e um numero suportado :)

Solução:

O que eu aconselho e criares uma variavel do tipo Public Shared por exemplo:

Public Shared id_produto as Integer

e depois atribuires o valor a ela no primeiro Form:

Form11.id_produto = DataGridView1.Rows(e.RowIndex).Cells(0).Value

Depois quando chamas o Form:

Form11.Show()

E ai ele vai passar no Form_Load e quando ja tiveres a grid preenchida fazes algo do tipo:

If id_Produto > 0 Then

DataGridView2.Rows(0).Cells(3).Value = id_produto	

End If

Espero ter ajudado..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fizeste o que o Hellblazer te disse?  o que ele te explicou esta correcto, nao conseguiste?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
O que eu aconselho e criares uma variavel do tipo Public Shared por exemplo:

Public Shared id_produto as Integer

e depois atribuires o valor a ela no primeiro Form:

Form11.id_produto = DataGridView1.Rows(e.RowIndex).Cells(0).Value

Tipo esta varial do tipo shared aplico a onde? dentro do private do celldobleclick?:S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

onde estas a definir estas variaveis?

        nome_produto = DataGridView1.Rows(e.RowIndex).Cells(1).Value

        tipopapel = DataGridView1.Rows(e.RowIndex).Cells(2).Value

        formato = DataGridView1.Rows(e.RowIndex).Cells(3).Value

        corpapel = DataGridView1.Rows(e.RowIndex).Cells(4).Value

        corimpressao = DataGridView1.Rows(e.RowIndex).Cells(5).Value

        preco = DataGridView1.Rows(e.RowIndex).Cells(6).Value

        id_produto = DataGridView1.Rows(e.RowIndex).Cells(0).Value

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho este codigo para quando faço doble click na primeira datagrid:

 

  Private Sub DataGridView1_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick

        nome_produto = DataGridView1.Rows(e.RowIndex).Cells(1).Value
        tipopapel = DataGridView1.Rows(e.RowIndex).Cells(2).Value
        formato = DataGridView1.Rows(e.RowIndex).Cells(3).Value
        corpapel = DataGridView1.Rows(e.RowIndex).Cells(4).Value
        corimpressao = DataGridView1.Rows(e.RowIndex).Cells(5).Value
        preco = DataGridView1.Rows(e.RowIndex).Cells(6).Value
        id_produto = DataGridView1.Rows(e.RowIndex).Cells(0).Value


        Form11.Alterar(id_produto)
        Me.Close()

    End Sub

Depois na segunda datagrid tenho este código:

 Sub Alterar( id_produto As Integer)

        'id_produtoTextBox.DataBindings.Clear()
        'Nome_produtoTextBox.DataBindings.Clear()
        'TipopapelTextBox.DataBindings.Clear()
        'FormatoTextBox.DataBindings.Clear()
        'CorpapelTextBox.DataBindings.Clear()
        'CorimpressaoTextBox.DataBindings.Clear()
        'PrecoTextBox.DataBindings.Clear()
        'TextBox1.DataBindings.Clear()


        'Nome_produtoTextBox.Text = Nothing
        'TipopapelTextBox.Text = Nothing
        'FormatoTextBox.Text = Nothing
        'CorpapelTextBox.Text = Nothing
        'CorimpressaoTextBox.Text = Nothing
        'PrecoTextBox.Text = Nothing
        'TextBox1.Text = Nothing


        DataGridView2.Rows(0).Cells(3).Value = id_produto

        Me.Show()

    End Sub

Nao estou a ver as variaveis aki definidas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este código é o que utilizo para enviar dados de um registo numa datagrid para uma textbox, só que ai não tenho definido para igual a uma textbox, tenho lá este codigo:

DataGridView2.Rows(0).Cells(3).Value = id_produto

é o que eu penso que esteje mal

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo esta varial do tipo shared aplico a onde? dentro do private do celldobleclick?:S

Pessoal um pouco de pesquisa na net ajuda a não fazer este tipo de perguntas e a aprender à nossa custa. Atenção não estou a queres "deitar a baixo" ninguém, só que é preciso um pouco mais de pro-actividade.

Dentro de um Sub ou Function apenas se pode declarar variáveis como Dim ... todas as outras têm de ser feitas a nível do módulo ou da classe, como é o caso do Public Shared.

Isto faz parte dos básicos ... vê estes artigos:

http://www.visualbasicrocks.com/Basics/Variables/WhatIsAVariable.aspx

http://www.visualbasicrocks.com/Basics/Variables/DeclaringVariables.aspx

http://www.visualbasicrocks.com/Basics/Variables/NamingVariables.aspx

e em especial:

http://www.visualbasicrocks.com/Basics/Variables/AccessModifiers.aspx

Uma pesquisa ajuda-nos a fazer melhores perguntas e a resolver mais rápidamente os nossos problemas :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Public Class Form1

    Public Shared id_produto as Integer

num form novo tens isto certo...agora no teu form abaixo da class do teu form metes isto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas que complicação que para aqui javai lol...

Tipo esta varial do tipo shared aplico a onde? dentro do private do celldobleclick?:S

Aplicas no novo form dentro da class mas fora de todos os metodos :) para poderes aceder atravez de outro Form =)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora