Dag allemaal,
Al enige tijd zit ik met een dillema voor wat betreft databinding en tabellen met relaties. Ik heb twee tabellen. Gewoon, in de simpele vorm.
Database is mySql, op datatables niveaus zijn geen relaties ingesteld.
Nu zit ik enige tijd wat te rommelen met data binding i.c.m. de hierboven genoemde datastructuur. Ik heb een simpele Windows form (geen ASP.Net) met daarop een datagridview en een label. De datagrid laat de inhoud van table ref1 zien, waarbij geselecteerd welke erbij hoort (zie verderop), en de label met de main.text.
De data wordt in een dataset (dsMain) geladen m.b.v. een DataAdapter. Allemaal niet spannend (en werkt ook).
Nu wil ik het volgende bereiken:
a. pijltjes toetsen (buttons) laten de DataRow een positie++ of positie-- doen
b. Daarna wil ik kijken of mij lukt om een row toe te kunnen voegen.
Puntje a loop ik al vast. Ik begreep uit documentaties dat ik
a. een relatie moet aanmaken in de dataset tussen ref1.id->main.ref1id (oke, gemaand ref1_main)
b. gebruik te maken van DataSet.DefaultViewManager.
Dus zo gehoorzaam dat ik ben, probeer ik het volgende uit:
Opstarten laat alles goed binden: datagrid zie ik verschijnen met table ref1, en label is gevuld met de tekst uit main.text.
Nu probeer ik met allemacht dat bij positie++ (van main) alle databinding meegaan volgens de waarden die zijn in de volgende rij. Dus als rij 2 van main wordt geselecteerd, ref1Id verwijst naar een ander record uit ref1 tabel, dat deze in de datagridview ook wordt geselecteerd.
Dus, de button click ziet er als volgt uit
Label doet mee, but no way voor de datagrid
.
Dit werkt wel:
Maar een stemmetje in mijn achterhoofd zegt mij dat dit niet klopt. Logisch want ik zet de position van de datagrid een stapje vooruit, maar naar mijn idee niet wat in de rij (main) is ingesteld.
Kortom, ik weet niet wat ik nu mis. Wie kan mij even een zetje geven in de goede richting?
Al enige tijd zit ik met een dillema voor wat betreft databinding en tabellen met relaties. Ik heb twee tabellen. Gewoon, in de simpele vorm.
code:
1
2
3
4
5
6
7
8
9
10
| table main --------------- id (int, primary key) ref1id (int) text (text) table ref1 ------------- id (int, primary key) text (text) |
Database is mySql, op datatables niveaus zijn geen relaties ingesteld.
Nu zit ik enige tijd wat te rommelen met data binding i.c.m. de hierboven genoemde datastructuur. Ik heb een simpele Windows form (geen ASP.Net) met daarop een datagridview en een label. De datagrid laat de inhoud van table ref1 zien, waarbij geselecteerd welke erbij hoort (zie verderop), en de label met de main.text.
De data wordt in een dataset (dsMain) geladen m.b.v. een DataAdapter. Allemaal niet spannend (en werkt ook).
Nu wil ik het volgende bereiken:
a. pijltjes toetsen (buttons) laten de DataRow een positie++ of positie-- doen
b. Daarna wil ik kijken of mij lukt om een row toe te kunnen voegen.
Puntje a loop ik al vast. Ik begreep uit documentaties dat ik
a. een relatie moet aanmaken in de dataset tussen ref1.id->main.ref1id (oke, gemaand ref1_main)
b. gebruik te maken van DataSet.DefaultViewManager.
Dus zo gehoorzaam dat ik ben, probeer ik het volgende uit:
C#:
1
2
3
4
5
6
7
8
| DataViewManager dvm = dsMainl.DefaultViewManager; // DataGrid binding dataGridView1.DataSource = dvm ; dataGridView1.DataMember = "ref1"; // Label label1.DataBindings.Add("text", dvm, "main.text"); |
Opstarten laat alles goed binden: datagrid zie ik verschijnen met table ref1, en label is gevuld met de tekst uit main.text.
Nu probeer ik met allemacht dat bij positie++ (van main) alle databinding meegaan volgens de waarden die zijn in de volgende rij. Dus als rij 2 van main wordt geselecteerd, ref1Id verwijst naar een ander record uit ref1 tabel, dat deze in de datagridview ook wordt geselecteerd.
Dus, de button click ziet er als volgt uit
C#:
1
| this.BindingContext[_dvm, "main"].Position++; |
Label doet mee, but no way voor de datagrid
Dit werkt wel:
C#:
1
| this.BindingContext[_dvm, "ref1"].Position++; |
Maar een stemmetje in mijn achterhoofd zegt mij dat dit niet klopt. Logisch want ik zet de position van de datagrid een stapje vooruit, maar naar mijn idee niet wat in de rij (main) is ingesteld.
Kortom, ik weet niet wat ik nu mis. Wie kan mij even een zetje geven in de goede richting?