protected void OnBtnAddRowClicked(object sender, EventArgs e) { TreeIter?iter = GetSelectedRow(); TreeIter node; if (!iter.HasValue) { return; } else { //Pokud byl vracen TreeIter, přiřadí se jeho hodnota node = iter.Value; if (foodTreeStore.GetValue(node, 2) != null) { return; } //Zobrazí se dialog na nové jídlo var dlg = new AddFoodDialog(); if (dlg.Run() == (int)ResponseType.Ok) { //Jídlo se vytvoří i jako třída Food a přidá se do listu a zobrazí se na treeview Food fd = new Food(); fd.SetValues(dlg.Values); var alg = this.server.database.Allergenes.AsEnumerable(); fd.SetAllergenes(alg.GetAllergenes(dlg.Allergenes)); food.Add(fd); foodTreeStore.AppendValues(node, dlg.Values.ToArray().SubArray(1, 5)); treeview.ShowAll(); } dlg.Destroy(); dlg.Dispose(); } }
//Přídání eventu na kliknutí řádku v treeview private void appendEventHandlers() { this.treeview.RowActivated += (sender, e) => { //Třída TreeIter je důležitá pro upravení hodnot řádku Gtk.TreeIter iterator; //Získa TreeIter z cesty řádku, na který bylo kliknuto foodTreeStore.GetIterFromString(out iterator, e.Path.ToString()); //Kontola, jestli řádek na který bylo kliknuto je řádek, který se může upravovat, což jsou jen řádky s jídlem if (foodTreeStore.GetValue(iterator, 2) != null) { //Název jídla string label = foodTreeStore.GetValue(iterator, 0).ToString(); //Najde index v listu jídla a podle toho je třída předána do dialogu, který přídává nebo upraví jídlo int result = food.FindFoodIndex(label); var dlg = new AddFoodDialog(food[result]); //dlg.SetAllergenes(food[result].GetAllergenIds()); if (dlg.Run() == (int)ResponseType.Ok) { //Upraví data foodTreeStore.SetValues(iterator, dlg.Values.ToArray().SubArray(1, 5)); food[result].SetValues(dlg.Values.ToArray()); //Clear all relations with allergens food[result].Allergen.Clear(); //aId = allergen Id foreach (int aId in dlg.Allergenes) { //Pole alergenů jsou ve výchozí hodnotě 0, opět aby se dali kontrolovat if (aId == 0) { continue; } //Vezme se alergen přímo z databáze, aby se nevytvářel v DB nový záznam, ale aby vznikla vazba var allergen = (from a in this.server.database.Allergenes.ToList() where a.Id == aId select a).First(); food[result].SetAllergen(allergen); } } } }; }