Итак, сегодня мы сделаем простую телефонную книгу. Данные будем хранить в XML файле такой структуры Code <adressbook> <record name="Вася Пупкин" telephone="+79174544534;+74545454547" email="vasya@mail.ru" adress="nodata" /> </adressbook> Всё вроде ясно. Ставим на форму HBoxLayout. Вниз - StatusBar Вверх - ScrolledWindow, в котором будет грид с данными Такой код : Code using System; using Gtk; using System.Xml;
/* * Класс описывает строку в книге * В конструктор передаются : имя, телефон, мейл, адрес * для вывода */ public class MyTreeNode : Gtk.TreeNode { string aname; string atelephone; string amail; string aadress; public MyTreeNode (string sname,string telephone,string mail,string adress) { name=sname; aname = sname; atelephone = telephone; amail = mail; aadress = adress; } [Gtk.TreeNodeValue (Column=0)] public string name; [Gtk.TreeNodeValue (Column=1)] public string telephone {get { return atelephone; } } [Gtk.TreeNodeValue (Column=2)] public string mail {get { return amail; } } [Gtk.TreeNodeValue (Column=3)] public string adress {get { return aadress; } } }
public partial class MainWindow: Gtk.Window { /* * Хранение данных идёт в этой переменной */ Gtk.NodeStore store; Gtk.NodeStore Store { get { if (store == null) { store = new Gtk.NodeStore (typeof (MyTreeNode)); } return store; } } /* * Функция загрузки данных */ protected void LoadData(){ XmlDocument xd = new XmlDocument(); /* * Очищаем хранилище */ Store.Clear(); /* * Создаём и настраиваем NodeView */ Gtk.NodeView view = new Gtk.NodeView (Store); scrolledwindow.Add(view); // Create a column with title Artist and bind its renderer to model column 0 view.AppendColumn ("Имя", new Gtk.CellRendererText (), "text", 0); view.AppendColumn ("Телефон", new Gtk.CellRendererText (), "text", 1); view.AppendColumn ("Мейл", new Gtk.CellRendererText (), "text", 2); view.AppendColumn ("Адрес", new Gtk.CellRendererText (), "text", 3); /* * Создаём из файла data.xml, поток данных * и грузим из него xml документ */ System.IO.FileStream fs = new System.IO.FileStream("data.xml", System.IO.FileMode.Open); xd.Load(fs); // Закрываем поток fs.Close(); String name=""; String telephone=""; String mail=""; String adress=""; XmlNodeList list = xd.GetElementsByTagName("record"); // Создаем и заполняем лист по тегу "user" /* * после чего обходим все элементы */ for (int i = 0; i < list.Count; i++) { XmlElement record=(XmlElement)xd.GetElementsByTagName("record")[i]; name = record.GetAttribute("name"); telephone = record.GetAttribute("telephone"); mail = record.GetAttribute("email"); adress = record.GetAttribute("adress"); /* * Добавляем элемент */ store.AddNode (new MyTreeNode (name,telephone,mail,adress)); } /* * Отобразим данные */ view.ShowAll (); // Закрываем поток fs.Close(); } //конструктор окна public MainWindow (): base (Gtk.WindowType.Toplevel) { Build (); //грузим данные LoadData(); } protected void OnDeleteEvent (object sender, DeleteEventArgs a) { Application.Quit (); a.RetVal = true; } } всё вроде ясно по комментам Скриншот работающей программы :
|