public Gtk.TreeStore GetTextContentFor(int veranstaltungs_id, string categorie, int tabIndex) { if (cached_CategorieQuery == null || cached_veranstaltungs_id != veranstaltungs_id || cached_categorie == null || !cached_categorie.Equals(categorie)) { CacheCategorieContent(veranstaltungs_id, categorie); } CategorieQuery[][] titleList = cached_CategorieQuery[tabIndex]; // Rang, Text, Typ TreeStore treeStore = new Gtk.TreeStore(typeof(string), typeof(string), typeof(string)); TreeIter currIter = TreeIter.Zero; foreach (CategorieQuery[] titles in titleList) { if (titles.Length == 0) // No childs { continue; } CategorieQuery currElem = titles[0]; currIter = treeStore.AppendValues( "" + currElem.TitelRang, "" + API_Contract.CategorieTextParentTypHR[currElem.TitelTyp], "" + currElem.Titel); try { if (currElem.Text != null) { foreach (var text in titles) { treeStore.AppendValues(currIter, "" + text.TextRang, "" + API_Contract.CategorieTextChildTypHR[currElem.TextTyp], "" + text.Text); } } } catch (Exception e) { Console.WriteLine(e.ToString()); return(new Gtk.TreeStore(typeof(string), typeof(string), typeof(string))); } } return(treeStore); }
private void CacheCategorieContent(int veranstaltungs_id, string categorie) { this.cached_veranstaltungs_id = veranstaltungs_id; this.cached_categorie = categorie; CategorieQuery[] query = db.Query <CategorieQuery>(@" SELECT Kategorie.Titel AS KategorieName, Kategorie_Tab.TabName AS TabName, Kategorie_Tab.Rang AS TabRang, Kategorie_Tab_Titel.Titel AS Titel, Kategorie_Tab_Titel.Rang AS TitelRang, Kategorie_Tab_Titel.Typ As TitelTyp, Kategorie_Tab_Text.Text AS Text, Kategorie_Tab_Text.Rang AS TextRang, Kategorie_Tab_Text.Typ AS TextTyp FROM Kategorie LEFT JOIN Kategorie_Tab ON Kategorie_Tab.Name_Kategorie == Kategorie.Titel LEFT JOIN Kategorie_Tab_Titel ON Kategorie_Tab_Titel.Name_Kategorie == Kategorie.Titel AND Kategorie_Tab_Titel.TabName_Kategorie_Tab == Kategorie_Tab.TabName LEFT JOIN Kategorie_Tab_Text ON Kategorie_Tab_Text.Name_Kategorie == Kategorie.Titel AND Kategorie_Tab_Text.TabName_Kategorie_Tab == Kategorie_Tab.TabName AND Kategorie_Tab_Text.Titel_Kategorie_Tab_Titel == Kategorie_Tab_Titel.Titel WHERE Kategorie.Id_Veranstaltung == ? AND Kategorie.Titel == ? ORDER BY Kategorie.Titel, Kategorie_Tab.Rang, Kategorie_Tab_Titel.Rang, Kategorie_Tab_Text.Rang" , veranstaltungs_id, categorie).ToArray(); var tabList = new List <List <List <CategorieQuery> > >(); // Make that query on the database and try to visualize it int i = 0; while (i < query.Length) { int currTabR = query[i].TabRang; var titelList = new List <List <CategorieQuery> >(); // While tabId is equal while (i < query.Length && currTabR == query[i].TabRang) // Has childs { var textList = new List <CategorieQuery>(); if (query[i].Titel != null) // Has childs { int currTitelR = query[i].TitelRang; // While tabId and titelId is equal while (i < query.Length && currTabR == query[i].TabRang && currTitelR == query[i].TitelRang) { textList.Add(query[i]); i++; } } else { i++; // No childs -> next entry } titelList.Add(textList); } tabList.Add(titelList); } //Save in array cached_CategorieQuery = new CategorieQuery[tabList.Count][][]; for (i = 0; i < tabList.Count; i++) { cached_CategorieQuery[i] = new CategorieQuery[tabList[i].Count][]; for (int j = 0; j < tabList[i].Count; j++) { cached_CategorieQuery[i][j] = tabList[i][j].ToArray(); } } }