• Whee! Da’s dus iets dat

    Whee! Da’s dus iets dat ik al sinds vorig jaar voor mij uit schuif, dat mij al die tijd heeft tegengestoken in die Delphi-applicatie, en nu opgelost is!

    Alla. En dan nu die listview.

  • Treeview is gedaan, nu de

    Treeview is gedaan, nu de listview bovenaan rechts. Enfin, ik zeg dat de treeview gedaan is, maar da’s eigenlijk niet waar: als ik een authorNode uitklap, dan toon ik alle boeken van die auteur. En dat zou niet mogen: ik zou eigenlijk alleen maar de boeken van die auteur in die rol mogen tonen.

    Dus als ik op Isaac Asimov-als-editor klik, wil ik eigenlijk alleen maar de vier boeken die ik van hem heb als editor, en niet de 23 die ik heb als auteur. Harumf. En nu werkt dat allemaal met één eenvoudig parametertje van deze node. Hij zou dus een node naar boven moeten, en de queryString aanpassen, bah. Ik heb eigenlijk geen zin om er naar te kijken, maar in het kader van meer dan 85% maar doen zeker?

  • Thé Lau! Op de Pop

    Thé Lau! Op de Pop Poll op Canvas! Ik heb die mens live gezien met The Scene op Torhout, en live op zijn alleen akoestisch in één of ander cultureel centrum, en allebei magnifiek goed.

  • Hm. ’t Was niet eens

    Hm. ’t Was niet eens zo moeilijk: het is een kwestie van veiligheid, dat TreeDataNode van TreeNode en TreeNode van MarshalByRefObject inherited is, en dat daarvoor expliciete get en set methods moeten gemaakt worden.

    Dus ’t was een zaak van een intern id en een extern ID te hebben, een accessor te maken, en Bob’s yer uncle:

    private class TreeDataNode : TreeNode
    {
        private
    int id;
        public int ID 
        {
            get { return id; }
            set { id=value; }
        }

  • Grr! Nu heb ik het

    Grr! Nu heb ik het weer van die marshal-by-referer-histories. En deze keer kan ik er niet rond, ik heb het ID echt nodig:

    if (thisNode.ID!=0) { queryString+=thisNode.ID.ToString(); }

    Damned. Ik zal moeten zoeken.

  • Oops, vergeten dat ik TreeDataNodes

    Oops, vergeten dat ik TreeDataNodes moest aanmaken, geen eenvoudige TreeNodes!

    Hopsadaisy:

    TreeDataNode tn=new TreeDataNode(
        dr.GetString(dr.GetOrdinal(nameField))+ 
        ” (“+dr.GetInt32(dr.GetOrdinal(countField))+”)”,
        expandedNode,
        dr.GetInt32(dr.GetOrdinal(keyField)));
    thisNode.Nodes.Add(tn);

    Oche, ik weet wel dat het allemaan geen raketwetenschap is, maar ik doe het echt zó graag, programmeren. Iets maken van niets, en ondertussen nieuwe dingen bijleren–is er iets wijzer?

  • Echt wel een gemak, die

    Echt wel een gemak, die DataReader in C#. Gaat enkel vooruit, doet niets anders dan data lezen, maar: verblindend snel, en bijzonder eenvoudig:

    cnnBooks.Open();
    OleDbCommand getData=new
    OleDbCommand(queryString,cnnBooks);
    OleDbDataReader dr=getData.ExecuteReader();

    while
    (dr.Read())
    {

        thisNode.Nodes.Add(
            dr.GetString(dr.GetOrdinal(nameField))+ 
            ” (“+dr.GetInt32(dr.GetOrdinal(countField))+”)”);
    }

    dr.Close();
    cnnBooks.Close();

    Connectie open zetten, commando aanmaken en instantiëren, commando uitvoeren en in de reader steken, over de rijen van de reader lopen en nodes in de treeview aanmaken, datareader sluiten, connectie sluiten. Easy as π:

  • De eerste aflevering van Monk

    De eerste aflevering van Monk gezien op bbc2. Echt wel goed.

  • Turkey insists on invading northern

    Turkey insists on invading northern Iraq

    Turkish Foreign Minister Abdullah Gul says Turkey will invade northern Iraq to stop an influx of refugees and to prevent what he calls “terrorist activities.” The latter is Turkish for anything a Kurd does. The US has opposed the move.

    The Kurds have proven themselves to be friends of the US in this conflict. Turkey has not. Why shouldn’t the US tell Turkey to go stuff it? It’s amazing what nations have been forced to keep up with from Turkey, a country that has been guilty of more genocides than any other nation in history, just because they have a lucky strategic location. Now they want to join the west, and join EU, and it’s time to make them crawl a bit and start behaving like a civilised nation.

    [Secular Blasphemy]

  • Dienstmededeling: ik ben verliefd op

    Dienstmededeling: ik ben verliefd op Visual Studio.NET. Zo’n ongelooflijke goeie IDE dat het niet meer proper is.

  • Egads! Krijg ik nu zo’n

    Egads! Krijg ik nu zo’n foutboodschap:

    mainForm.cs(260): Cannot pass ‘Squid.mainForm.TreeDataNode.NodeType’ as ref or out, because ‘Squid.mainForm.TreeDataNode.NodeType’ is a marshal-by-reference class

    Rats. Ik ben zover nog niet geraakt in Programming C#. Marshaling en remoting, het zegt mij nog helemaal niets. Ahem. Kludge dan maar zeker?

    Bon, schijnt te werken. TreeNode uitgebreid naar TreeDataNode met wat eigen gegevens die uit de database komen, en dat geeft dan dit:

    private void tvMain_AfterExpand(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
        TreeDataNode thisNode=((TreeDataNode)e.Node);
        if
    (thisNode.NodeType!=NodeType.rootNode) 
        {
            thisNode.Nodes.Clear();
            switch
    (thisNode.NodeType) 
            {
                case
    NodeType.peopleRootNode:
                    thisNode.Nodes.Add(“functions go here”);
                    break
    ;
                case
    NodeType.genreRootNode:
                    thisNode.Nodes.Add(“genres go here”);
                    break
    ;
                default
    :
                    thisNode.Nodes.Add(“other stuff goes here”);
                    break
    ;
            }
        }
    }

    Heh, en dat geeft dan dit:

  • Prutsen prutsen prutsen. Ik ga

    Prutsen prutsen prutsen. Ik ga eens herbeginnen met mijn boomstructuur en wat properder werken. Om te beginnen een

    enum NodeType {
      undefinedNode,rootNode,functionNode,authorNode,bookNode,
      genreNode,publisherNode,seriesNode,peopleRootNode,
      seriesRootNode,publisherRootNode,genreRootNode
    }

    maken in plaats van alles ad hoc bij te houden. Zucht.

  • Sandra en de kinderen zijn

    Sandra en de kinderen zijn naar Oudenaarde, ik ga er eens aan beginnen om te programmeren. Zolang Zelie hier naast mij zat Robbie Konijn te spelen zou het toch niet gelukt zijn.

    Enfin, ik heb wel al een splash screen gemaakt. Ha!

  • His dictis: form opzetten. Het

    His dictis: form opzetten. Het zal hetzelfde zijn als ik bijna precies een jaar geleden in Delphi heb gedaan: drie panes, links een treeview met de verschillende mogelijkheden om een drill-down te doen al in de tree, dan rechtsboven een listview met de drill-down van de nu geselecteerde node in de treeview, en daaronder een html-ding met ge-xsl-de xml van de selecteditem in de listview:

    En bij dubbelklik op om het even welk van die dingen, een editor:

    Allemaal simpele dinges, dus dat mag eigenlijk niet zo lang duren. Zei hij, zichzelf overschattend 🙂

  • Bon, ik ken genoeg van

    Bon, ik ken genoeg van C# om aan een applicatie te beginnen.

    Zoals ik vroeger altijd aan hetzelfde spelletje begon, ga ik nu hetzelfde doen als wat ik in Access afgemaakt heb en in Delphi aan begonnen ben: een applicatie om mijn boeken te beheren. In ColdFusion had ik het al ooit eens on-line gezet, maar nu is het dus tijd om eens een echte serieuze applicatie te maken. In .NET. Met C#. Jawel!

    De database is er al jaren, eigenlijk al van toen ik nog voornamelijk in DOS werkte en alles in dBASE II+ stak. Later omgezet naar dBASE IV, nog later eventjes naar Symantex Q&A (“show me the 10 most expensive books I bought this year”), en dan in een opeenvolging van Access-versies. Nu ziet het er zo uit:

    Het is niet direkt een model van de beste databasestructuur die er bestaat, maar het doet zijn werk. In het kort:

    De centrale tabel is tblBooks. Daarin zitten een aantal eigenschapen van de boeken zelf (titel, aantal pagina’s, pubilcatiejaar, prijs, …), wat FKs naar andere tabellen: type cover (paperback, hardcover, …), genre (geschiedenis, science fiction, …), uitgever, eigenaar (mezelf, Sandra, …) etc.

    Boeken kunnen één of meer auteurs (tblAuthors) hebben. Die auteurs kunnen een “functie” hebben (auteur, vertaler, illustrator, …), en voor elke boek kan één of meer auteurs “primair” zijn (dus bvb. Avontuur in het Verleden kan als auteurs Poul Anderson (primair, auteur) en P. Groen (niet-primair, vertaler) hebben.

    Boeken kunnen ook onderdelen (tblParts) hebben, telkens met één of meer auteurs: een anthologie als The Chronicles of the Holy Grail heeft dan als primaire auteur Mike Ashley (editor), en bevat 23 onderdelen, beginnend met The Holy Grail (Mike Ashley), The MAgic Bowl (Peter Tremayne), etc.

    In de omgekeerde richting zijn boeken soms ook zelf onderdelen van series (tblSeries): zo is The Doll’s House van Neil Gaiman deel 2 van de Sandman-serie.

    Laatste element is dat er op elk niveau (series, boeken, onderdelen) nog reviews kunnen toegevoegd worden. Dit zitten nu voor het gemak in drie afzonderlijke structuren.

    Bij elke versie steek ik er wel iets nieuws bij. Ik denk dat ik deze keer die reviews ga rationaliseren. Het zal dan niet meer in Access proper te tekenen zijn, maar ja, niets aan te doen. Iets als tblReviews.item_id en tblReviews.itemType. En er zou ook iets als “uitgeleend aan” moeten bij komen. En iets van “locatie”. En eigenlijk, als ik toch bezig ben, ik kan er zo goed ook direkt mijn CD’s bijsteken en DVD’s.

    Enfin, eerst de bestaande Access-dingen omzetten naar C#, dat zal al moeilijk genoeg zijn: