c# – GTK#Treeview – 如何对子节点进行排序

c# – GTK#Treeview – 如何对子节点进行排序,第1张

概述我有一个像这个图像的子节点的Gtk.TreeView(由于雇主专有原因,我已经覆盖了文本): 按“标题”列排序(单击列标题)按3个父节点排序,当我真的只想让它对每个父节点下的所有子节目进行排序时.这可能吗? 请注意,按“路径”列排序会对子节点进行适当的排序;我认为因为父节点在该列中没有文本.所以我希望在父节点的Title列中有一个(简单?)方法. 排序有点复杂,因为您需要将代码的几个部分(模型和列 我有一个像这个图像的子节点的Gtk.TreeVIEw(由于雇主专有原因,我已经覆盖了文本):

按“标题”列排序(单击列标题)按3个父节点排序,当我真的只想让它对每个父节点下的所有子节目进行排序时.这可能吗?

请注意,按“路径”列排序会对子节点进行适当的排序;我认为因为父节点在该列中没有文本.所以我希望在父节点的Title列中有一个(简单?)方法.

解决方法 排序有点复杂,因为您需要将代码的几个部分(模型和列)合作.要对特定列进行排序,这是您需要执行的 *** 作:

>创建一个列(没有快捷方式)并为SortColumnID属性赋值.为了简单起见,我通常从0开始分配列的序号ID,即视图中的第一列为0,第二列为1,依此类推.
>将模型包装在Gtk.TreeModelSort中
>在新模型上调用SetSortFunc一次,对于要排序的列,并将您在(1)中设置的列ID作为第一个参数传递.确保匹配所有列ID.

行的排序方式取决于您用作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;    }}
总结

以上是内存溢出为你收集整理的c# – GTK#Treeview – 如何对子节点进行排序全部内容,希望文章能够帮你解决c# – GTK#Treeview – 如何对子节点进行排序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存