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

Luis Marques

Enviar dados de uma datagrid para outra datagrid

Recommended Posts

Luis Marques

É 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.


LM

Share this post


Link to post
Share on other sites
Hellblazer

Um dado ou a linha por completo? :D


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
Hellblazer

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?


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
Hellblazer

Como e que estas a preencher essas datagrids? :D


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
Luis Marques

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


LM

Share this post


Link to post
Share on other sites
Hellblazer

Ou seja as grids estao em forms difrentes ne?

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


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
Luis Marques

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


LM

Share this post


Link to post
Share on other sites
Hellblazer

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 :)


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
Hellblazer

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..


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
Luis Marques
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


LM

Share this post


Link to post
Share on other sites
esquima

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

Share this post


Link to post
Share on other sites
esquima

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

Share this post


Link to post
Share on other sites
Luis Marques

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


LM

Share this post


Link to post
Share on other sites
jpaulino

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 :)

Share this post


Link to post
Share on other sites
esquima

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

Share this post


Link to post
Share on other sites
Hellblazer

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 =)


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.