[C#]Databinding vanuit Dialog

Pagina: 1
Acties:

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 16-05 07:44
Ik heb een vraag m.b.t. databinding vanuit een andere dialog. Het gaat om een klant-order systeem. Ik heb een main frame met daarop wat textfieldjes naw gegevens. Nu wil ik via een dialog een klant laten kiezen, selecteerbaar vanuit een datagrid. Nadat er een klant is gekozen uit de datagrid moeten de textfields uit de mainframe automatisch worden bijgewerkt met de juiste gegevens.

Nu heb ik de volgende situatie met wat code als voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
this.dataSet.Relations.Add("KlantenNaarKlachten", 
                            dataSet.Tables["klanten"].Columns["id"], 
                            dataSet.Tables["klachten"].Columns["klantID"]);  


// The DataViewManager returned by the DefaultViewManager
// property allows you to create custom settings for each
// DataTable in the DataSet.
dsView = dataSet.DefaultViewManager;

...

// Grid Databinding
klachtenDataGrid.DataSource = dsView;
klachtenDataGrid.DataMember = "klanten.KlantenNaarKlachten";

selectKlant = new SelecteerKlant(dsView);


Hierbij heb ik dus in de dataset een relatie tussen de klanten en klachten tabel, een dataview en een datagrid. Nu is de klasse SelecteerKlant het dialog frame die de dataview meekrijgt en zo kan ik netjes in datagrid die op het frame staat vullen met de gegevens uit de dataset/dataview van de mainframe.

Maar, nu komt mijn probleem. Hoe kan ik het zo voor elkaar krijgen dat als ik een klant selecteer in de SelecteerKlant dialog, dat automatisch de juiste klant wordt verbonden aan de textfields in de mainframe?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je zou kunnen een delegate maken in je SelecteerKlant dialog die uitgevoerd wordt als er op OK oid geklikt wordt.

Bv:
code:
1
2
3
4
5
6
7
8
9
10
11
12
public class SelecteerKlant : Form
{
     public System.Windows.EventHandler   DoAfterOk;

     private void btnOK_Click(object sender, EventArgs e)
     {
             if( DoAfterOk != null )
             {
                  DoAfterOk(this, null);
             }
     }
}

In bovenstaande code ga je dus een extra eventhandler gaan maken die uitgevoerd wordt als er op OK geklikt wordt. De eventhandler wordt enkel uitgevoerd als er een method aan hangt.

In je klantenscherm doe je dit, als je je SelecteerKlant scherm opent.
code:
1
2
3
4
5
frmSelectKlant   selecteerKlant;

selecteerKlant = new frmSelectKlant();
selecteerKlant.DoAfterOk += new EventHandler(SetKlant);
selecteerKlant.Show();


Hier maak je dus een instance van frmSelectKlant, en hang je een method die zich op je KlantScherm bevindt aan die eventhandler die je gemaakt hebt in je selectie-scherm.

De method die je aan je eventhandler hangt, ziet er dan bv zo uit:
code:
1
2
3
4
5
6
7
8
9
private void SelectKlant(object sender, EventArgs e)
{
      int klantId;
      klantId = Convert.ToInt32(((frmSelectKlant)sender)KlantenDropDown.SelectedValue);

      // Nu heb je het klant - id, nu moet je nog naar de juiste klant navigeren
      // (met de CurrencyManager)
      
}


Je kan het natuurlijk ook anders oplossen:
Je toont je selecteerKlant scherm modaal, en je leest de modalresult uit:

code:
1
2
3
4
5
if( selecteerKlant.ShowDialog() == DialogResult.OK )
{
     int klantId = Convert.ToInt32(selecteerKlant.KlantenDropDown.SelectedValue);
     // selecteer nu de juiste klant
}

https://fgheysels.github.io/


  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 16-05 07:44
Bedankt voor het mooie stukje uitleg!

Heb het inmiddels opgelost via het modaal tonen van het scherm. Aan deze oplossing had ik ook al gedacht. Maar had het niet goed opgelost met de CurrencyManager.

Kan nu dus weer verder.