Aceder a dados de um form noutro form C#

candycane

Power Member
Boa tarde comunidade! :)

Eu tenho num projecto 2 forms, um mostra numa grid os dados de uma base de dados, e o outro form insere esse dados.

O que estou a tentar fazer é, depois de inserir um dado pelo form2, fazer com que a grid do form1 faça um refresh...

Como posso fazer isso?

Já tentei assim:

form2:

Código:
[LEFT]publicstaticvoid  FillGrid_Contacts(Grid grid, int id)[/LEFT]

 [LEFT]{[/LEFT]

[INDENT]
[LEFT].....

[/LEFT]
[/INDENT]}
form2:

Código:
[LEFT]Form1 form = new Form1[/LEFT]

  [LEFT]privatevoid  btn_add_Click(object sender, EventArgs  e)[/LEFT]


 [LEFT]{[/LEFT]

[INDENT]
[LEFT].....[/LEFT]


 [LEFT]Form1.FillGrid_Contacts(form.grid_contacts, Int32.Parse(cb_id.SelectedValue.ToString()));

[/LEFT]
[/INDENT]}
mas não actualiza :(
 
Última edição pelo moderador:
ao criares uma nova instancia da Form1 tens de utilizar form.FillGrid(...)

ainda assim poderas ter de utilizar delegates pq a form esta numa thread diferente.
 
Boa tarde comunidade! :)

Eu tenho num projecto 2 forms, um mostra numa grid os dados de uma base de dados, e o outro form insere esse dados.

O que estou a tentar fazer é, depois de inserir um dado pelo form2, fazer com que a grid do form1 faça um refresh...

Como posso fazer isso?

Já tentei assim:

form2:

Código:
[LEFT][SIZE=2][COLOR=white][SIZE=2]public[/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=white][SIZE=2]static[/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=white][SIZE=2]void[/SIZE][/COLOR][/SIZE][SIZE=2]  FillGrid_Contacts(Grid grid, [SIZE=2][COLOR=white][SIZE=2]int id[/SIZE][/COLOR][/SIZE])[/SIZE][/LEFT]
 

 [LEFT][SIZE=2]{[/SIZE][/LEFT]

[INDENT][LEFT].....[/LEFT]
 
 
[/INDENT]}
form2:

Código:
[LEFT][COLOR=white]Form1 form = [/COLOR][COLOR=white]new [/COLOR][COLOR=white]Form1[/COLOR][/LEFT]
 

  [LEFT][COLOR=white]private[/COLOR][SIZE=2][COLOR=white][SIZE=2]void[/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=white]  btn_add_Click([/COLOR][/SIZE][SIZE=2][COLOR=white][SIZE=2]object[/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=white] sender, [/COLOR][/SIZE][SIZE=2][COLOR=white][SIZE=2]EventArgs[/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=white]  e)[/COLOR][/SIZE][/LEFT]

 
 

 [LEFT][SIZE=2]{[/SIZE][/LEFT]

[INDENT][LEFT].....[/LEFT]
 
 

 [LEFT][COLOR=white]Form1.FillGrid_Contacts(form.grid_contacts, [/COLOR][SIZE=2][COLOR=white][SIZE=2]Int32[/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=white].[/COLOR]Parse(cb_id.SelectedValue.ToString()));[/SIZE][/LEFT]

 
 
[/INDENT][SIZE=2]}[/SIZE]
mas não actualiza :(



Supondo que:


Form1 tem a grid
Form2 edita a grid


Algures no Form1 tens um botão de editar e/ou adicionar novo registo q faz o seguinte:

Código:
Form2 f2 = new Form2();
if( f2.ShowDialog() == DialogResult.OK )
{
FillGrid();
}


Ou seja, chamas o form para editar/adicionar e quando fazes ok ele retorna ao principal e nessa altura faz o Refresh da grid (chama o mesmo método que faz o load inicial da grid )

Cumps


PS: Estou a supor que o form de editar não está sempre visivel

Se tiver q ficar os 2 abertos e se abrires o Form2 a partir do Form1:

]Form2 f2 = new Form2();

((Form1)f2.Parent).FillGrid_Contacts (... )
 
Última edição pelo moderador:
Obrigada por responderem :)

No form que mostro a grid, não tenho o botao de adicionar :(

O form adicionar vem do menu que tenho :(

Ou seja,
tenho um menu que tem uma opção de acidionar dados, ao clicar ai o form adicionar aparece. O que pretendo é depois de adicionar os dados, atualizar a grid qu est noutr form...

Já pesquisei varias vezes sobre isso e não consegui nda :(
 
Tens de passar o apontador da form1 para a Form2

exemplo

Form2:

Criar uma variavel global onde guardes esta Form1 que recebeste

Form1 main_frm;

Editar a Funcao New para receber como parametro a Form1

New(Form1 frm1)
{
InitializeComponent();

main_frm = frm1;

}



Depois entao ja podes fazer main_frm.FillQQCoisa


ao iniciares a Form2 basta fazer

Form2 f2 = New Form2(Me);
 
Deixa ver se entendi..

No fomr1 (onde esta a grid), faço:

Código:
public partial class frm_gerir : Form
{
        frm_gerir gerir;

        public frm_gerir()
        {
            InitializeComponent();
            gerir = this;
        }

      public void fillGrid()
     {
    ....
     }

    ...........


}


e no form2 (onde adiciono) faço:
Código:
frm_adicionar adicionar = new frm_adicionar();


e depois chamo o fillGrid() do form1 aonde quero?
 
Obrigada por responderem :)

No form que mostro a grid, não tenho o botao de adicionar :(

O form adicionar vem do menu que tenho :(

Ou seja,
tenho um menu que tem uma opção de acidionar dados, ao clicar ai o form adicionar aparece. O que pretendo é depois de adicionar os dados, atualizar a grid qu est noutr form...

Já pesquisei varias vezes sobre isso e não consegui nda :(

Já percebi...

Não estás a guardar os dados em base de dados, queres pegar directamento no que está na form2 e inserir dentro da grid que está na form1.

Se for assim...

Crias properties ( googla por "C# Properties" ) na class do form2, e quando fazes OK afectas as properties. Depois consegues aceder ás properties do form2 do lado do form1 quando retornas do ShowDialog() , como no exemplo que de á pouco.

Depois se quiseres editar utilizando o mesmo form2 basta afectar as properties antes de fazer o ShowDialog, e no load do form2 carregar os respectivos campos.


Cumps
 
Última edição:
Eu preencho a grid com dados da base de dados no fillGrid();

O que estou a tentar fazer é que depois de inserir um dado na base de dados, no frm_adicionar, fazer um refresh a grid que mostra os dados(na frm_gerir)...

Se ambos estivessem no mesmo form, já sabia como fazer, mas como estão em forms diferentes já não sei como é :\
 
já vi como fizeste :)

So que tenho é um probleminha...

Eu n mostro o form pelo show() ou dialog...

Código:
Form form = Activator.CreateInstance(formType, true) as Form;
 
Eu tenho um frm principal, e dentro desse form tenho um menu lateral que vai chamar o form respectivo do menu.

Para ter tipo uma tab control com opçao de fexar as tabs...

Mas tb tenho outros metodos que chamam outros form pelo show, por ai deu certinho como ensinas-te :D

Tenho é k arranjar uma soluçao para o form principal :s
 
E facil, crias uma funcao publica no Form2 que receba como parametro o form principal. E como tens no New mas chamalhe outra coisa. Depois de criares o Form2 fazes frm.Funcao(this);
 
Hmm n entendi bem o que quieste dizer :(

O principal é k activa os outros forms.

Ah.. tou a cria-los por MDI child forms ...
 
Última edição pelo moderador:
Esclarece-me uma duvida:

quem e que chama o Form2? é o Form1 ou e o outro Form de Menu que tens?

Se puderes por o projecto online, ou pelo menos uma parte dele para eu testar era fixe.
 
Última edição:
como ponho online?

Eu tenho um frm principal, um ultraExplorerBar, com menu lateral.
Quando clico em um dos menus laterais, o frm principal vais activar o form correspondente ao que se foi clicado.

É +- assim:

frm_principal: - frm_adicionar ; - frm_gerir


clico no menu adicionar o eo frm_adicionar é activado.
 
Zipas o projecto, vais a www.rapidshare.com e fazes upload. Dependendo do tamanho do zip pode demorar um bocado.

Vê se este metodo te serve, mas acho que nao.
http://rapidshare.com/files/144400709/FormsComm2.zip.html


Nao conheço esse Form que estas a usar por isso e um bocado complicado falar, mas a ideia e sempre a mesma.

Tens de ter um apontador para o Form que queres actualizar no Form2. Agora como o poes la e que nao posso dizer sem ver como isso funciona.
 
Calculo que o teu problema tem haver da forma como abres os Forms..

Que propriedade estás a utilizar "ShowDialog" ou Show ?

Código:
{ 
    FrmTeste f = new FrmTeste(); 
    
    // f.ShowDialog(); 
    // Utiliza antes desta forma
    f.Show(this); 
}

Nota: se pretenderes que alguma janela fique inactiva, só tens de desactivar o form e voltar a activar quando pretenderes.. ( f.Enabled = True/False)
 
Back
Topo