c# – GTK#Treeview – 如何对子节点进行排序
发布时间:2020-12-15 21:25:11 所属栏目:百科 来源:网络整理
导读:我有一个像这个图像的子节点的Gtk.TreeView(由于雇主专有原因,我已经覆盖了文本): 按“标题”列排序(单击列标题)按3个父节点排序,当我真的只想让它对每个父节点下的所有子节目进行排序时.这可能吗? 请注意,按“路径”列排序会对子节点进行适当的排序;我认
我有一个像这个图像的子节点的Gtk.TreeView(由于雇主专有原因,我已经覆盖了文本):
按“标题”列排序(单击列标题)按3个父节点排序,当我真的只想让它对每个父节点下的所有子节目进行排序时.这可能吗? 请注意,按“路径”列排序会对子节点进行适当的排序;我认为因为父节点在该列中没有文本.所以我希望在父节点的Title列中有一个(简单?)方法. 解决方法
排序有点复杂,因为您需要将代码的几个部分(模型和列)合作.要对特定列进行排序,这是您需要执行的操作:
>创建一个列(没有快捷方式)并为SortColumnId属性赋值.为了简单起见,我通常从0开始分配列的序号id,即视图中的第一列为0,第二列为1,依此类推. 行的排序方式取决于您用作SetSortFunc的第二个参数的委托.你得到了模型和两个iters,你几乎可以做任何事情,甚至可以对多个列进行排序(使用两个iters,你可以从模型中获取任何值,而不仅仅是排序列中显示的值.) 这是一个简单的例子: class MainClass { public static void Main (string[] args) { Application.Init (); var win = CreateTreeWindow(); win.ShowAll (); Application.Run (); } public static Gtk.Window CreateTreeWindow() { Gtk.Window window = new Gtk.Window("Sortable TreeView"); Gtk.TreeIter iter; Gtk.TreeViewColumn col; Gtk.CellRendererText cell; Gtk.TreeView tree = new Gtk.TreeView(); cell = new Gtk.CellRendererText(); col = new Gtk.TreeViewColumn(); col.Title = "Column 1"; col.PackStart(cell,true); col.AddAttribute(cell,"text",0); col.SortColumnId = 0; tree.AppendColumn(col); cell = new Gtk.CellRendererText(); col = new Gtk.TreeViewColumn(); col.Title = "Column 2"; col.PackStart(cell,1); tree.AppendColumn(col); Gtk.TreeStore store = new Gtk.TreeStore(typeof (string),typeof (string)); iter = store.AppendValues("BBB"); store.AppendValues(iter,"AAA","Zzz"); store.AppendValues(iter,"DDD","Ttt"); store.AppendValues(iter,"CCC","Ggg"); iter = store.AppendValues("AAA"); store.AppendValues(iter,"ZZZ","GGG","Ggg"); store.AppendValues(iter,"TTT","Ttt"); Gtk.TreeModelSort sortable = new Gtk.TreeModelSort(store); sortable.SetSortFunc(0,delegate(TreeModel model,TreeIter a,TreeIter b) { string s1 = (string)model.GetValue(a,0); string s2 = (string)model.GetValue(b,0); return String.Compare(s1,s2); }); tree.Model = sortable; window.Add(tree); return window; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |