Op verschillende plaatsen in mijn winforms applicatie heb ik DataColumns met bepaalde Expressions toegevoegd aan DataTables. Via Parent / Child expressies kan ik dan waarden berekenen, opzoeken in andere DataTables etc ... Ook om bv. de volledige naam van een personeelslid te tonen in een combobox - terwijl ik enkel de voornaam en familienaam bijhoudt - maak ik gebruikt van een extra DataColumn. Probleem is dat als ik een nieuwe rij toevoeg aan de achterliggende DataTable, dat de Expression niet berekend wordt.
Concreet: in VS.NET heb ik een tesform gemaakt met 2 textboxen, 1 combobox en 1 button.
- declareer een variabele
- in de Form1_Load komt de volgende code:
- op Button1_Click komt het volgende te staan
Indien je nu op de button klikt, wordt een nieuw record aan de DataTable toegevoegd, de combobox is gebaseerd op dezelfde DataTable, dus daar verschijnt ook een extra record. Enige probleem is dat de opgegeven Expression niet verschijnt. (een leeg record verschijnt, klik ik nogmaals op de button, dan wordt het vorig toegevoegde record wel correct getoond) Gebruik ik een andere kolom, dan werkt alles wel naar behoren.
Enig idee wat er fout loopt? (Databinding property is voorlopig geen optie meer, project moet heel binnenkort binnen zijn
)
Concreet: in VS.NET heb ik een tesform gemaakt met 2 textboxen, 1 combobox en 1 button.
- declareer een variabele
code:
1
| private DataTable personen; |
- in de Form1_Load komt de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| personen = new DataTable("Personen");
DataColumn dc = new DataColumn("Voornaam");
personen.Columns.Add(dc);
dc = new DataColumn("Familienaam");
personen.Columns.Add(dc);
dc = new DataColumn("Naam");
dc.Expression = "Voornaam + ' ' + Familienaam";
personen.Columns.Add(dc);
DataRow dr = personen.NewRow();
dr["Voornaam"] = "Jan";
dr["Familienaam"] = "Peeters";
personen.Rows.Add(dr);
dr = personen.NewRow();
dr["Voornaam"] = "Pieter";
dr["Familienaam"] = "Janssens";
personen.Rows.Add(dr);
comboBox1.DataSource = personen;
comboBox1.DisplayMember = "Naam"; |
- op Button1_Click komt het volgende te staan
code:
1
2
3
4
| DataRow dr = personen.NewRow(); dr["Voornaam"] = textBox1.Text; dr["Familienaam"] = textBox2.Text; personen.Rows.Add(dr); |
Indien je nu op de button klikt, wordt een nieuw record aan de DataTable toegevoegd, de combobox is gebaseerd op dezelfde DataTable, dus daar verschijnt ook een extra record. Enige probleem is dat de opgegeven Expression niet verschijnt. (een leeg record verschijnt, klik ik nogmaals op de button, dan wordt het vorig toegevoegde record wel correct getoond) Gebruik ik een andere kolom, dan werkt alles wel naar behoren.
code:
1
| comboBox1.DisplayMember = "Voornaam"; |
Enig idee wat er fout loopt? (Databinding property is voorlopig geen optie meer, project moet heel binnenkort binnen zijn