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

Aceder a dados de um form noutro form C#

Discussão em 'Programação' iniciada por candycane, 9 de Setembro de 2008. (Respostas: 28; Visualizações: 6475)

  1. candycane

    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: 11 de Setembro de 2008
  2. Maxx77

    Maxx77 Power Member

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

    samouco Power Member



    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: 10 de Setembro de 2008
  4. candycane

    candycane Power Member

    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 :(
     
  5. iznougud

    iznougud I quit My Job for Folding

    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);
     
  6. candycane

    candycane Power Member

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

    samouco Power Member

    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: 11 de Setembro de 2008
  8. candycane

    candycane Power Member

    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 é :\
     
  9. iznougud

    iznougud I quit My Job for Folding

    Última edição: 11 de Setembro de 2008
  10. candycane

    candycane Power Member

    Muito obrigada!! :)
     
  11. candycane

    candycane Power Member

    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;
    
    
     
  12. iznougud

    iznougud I quit My Job for Folding

    Porque? Nunca usei esse metodo por isso nao sei o que faz
     
  13. candycane

    candycane Power Member

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

    iznougud I quit My Job for Folding

    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);
     
  15. candycane

    candycane Power Member

    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: 11 de Setembro de 2008
  16. iznougud

    iznougud I quit My Job for Folding

    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: 11 de Setembro de 2008
  17. candycane

    candycane Power Member

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

    iznougud I quit My Job for Folding

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

    fLaSh_CF Banido

    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)
     
  20. candycane

    candycane Power Member

    O projecto tem 110MB :|
     

Partilhar esta Página