[C#] UserControl functioneren met databinding

Pagina: 1
Acties:
  • 189 views sinds 30-01-2008
  • Reageer

  • robertpNL
  • Registratie: Augustus 2003
  • Niet online
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.

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?

Verwijderd

Wat ik uit je vraag begrijp is dat je dingen wil toevoegen zonder dat ze foutmeldingen geven op database niveau. Ik denk dat het redelijk wat op lost als je auto_increment geeft aan het id. Dan kan je gewoon naar hartelust inserten in je database en hoef je geen rekening te houden met de positie.

verder
simpele Windows form (geen ASP.Net)
wat gebruik je dan wel?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Als je een master-detail relatie hebt die je wilt visualeren, moet je de datarelation binden aan de grid of whatever waar je de 'details' wilt tonen.

https://fgheysels.github.io/