Aaaargh! Case sensitivity in databases! Hoe is dat in godsnaam mogelijk?!
We zijn juist terug van bij mijn moeder (mijn vader zat weer ergens ginderachter, Ljubjana deze keer, tsss), en ik dacht, I’ll give this datab binding lark another go.
En what do you know? Het is onnoemelijk onnoemelijk veel gemakkelijker dan ik dacht. Gegeven een combobox cbPublisher voor een lijst uitgevers, een datatable tblBook waarin het huidige boek zit en een datatable tblPublishers met alle uitgevers:
//de combobox een datasource geven
cbPublisher.DataSource=tblPublishers;
//displaymember van een combobox met datasource is wat getoond wordt
cbPublisher.DisplayMember=”publisher_name”;
//daarmee overeenkomend: valuemember, ’t zelfde als value in een (html-)<option>
cbPublisher.ValueMember=”publisher_ID”;
//hey presto! selectedvalue verbinden met book_publisher_id uit tblBook
cbPublisher.DataBindings.Add(“SelectedValue”, tblBook, “book_publisher_ID”);
En dat is het. Dat is àlles! Werkt direkt van de eerste keer, werkt perfect, doet wat het moet doen, prachtig. Sweet Jesus!
Enfin ja, alles, een groot woord. Ik heb dan nog een goeie drie kwartier zitten zoeken waarom het niet wou werken als ik er een tweede combobox aan toe wou voegen:
cbCover.DataSource=tblCovers;
cbCover.DisplayMember=”cover_type”;
cbCover.ValueMember=”cover_ID”;
cbCover.DataBindings.Add(“SelectedValue”, tblBooks, “book_cover_ID”);
Zucht, driedubbel zucht. Vieze fouten, in de zin van “Could not bind to the new value member”, en dan misleidende dingen over het internet verspreid vinden, bah.
Die brol is verdomme case sensitive!! Nu ja, figures eigenlijk wel: die dataset (eum, DataSet eigenlijk dus 🙂 is geen database maar een XML-dinges, en XML is nu eenmaal case sensitive. Het was dus gewoon dat cover_ID moest vervangen worden door cover_id. En nu werkt het gelijk een lierken:
Morgen doe ik de rest van die databound controls.