c# - 如何将选定的行从 TreeView 转移到另一个 TreeView?GTK#
问题描述
单击 a 时如何selected rows
从 a转移Treeview
到另一个?Treeview
Button
我一直在尝试ListStore
使用 的选择创建 atreeview1
并将其treeview2
作为 a TreeModel
,但我没有成功。
更新:我想出了一种方法,通过使用OnTreeservicesRowActivated
OnTreeservicesRowActivated 事件(仍然可以通过按钮完成) 和下面的代码。如果我点击得太快,它会“混合”这些行,但这是一个小麻烦。感谢您的回答
using System;
using Gtk;
using MySql.Data.MySqlClient;
namespace Proyect
{
public partial class Window : Gtk.Window
{
public Window() :
base(Gtk.WindowType.Toplevel)
{
this.Build();
//Adds columns to TreeViews
CreateTreeView(treeservices,tree2);
treeservices.Selection.Mode = SelectionMode.Single;
}
//List to populate tree2.
ListStore tree2list = new ListStore(typeof(string), typeof(string), typeof(string));
//Class for validating entry's and misc.
Validation val = new Validation();
//MySql connection
MySqlConnection c = new MySqlConnection(//connectionstring)
MySqlDataReader dr;
MySqlCommand cmd;
//CellRendererText for treeservices.
CellRendererText cellserv1 = new CellRendererText();
CellRendererText cellserv2 = new CellRendererText();
CellRendererText cellserv3 = new CellRendererText();
void CreateTreeView(TreeView treeservices, TreeView tree2 )
{
treeservices.AppendColumn("Code", cellserv1, "text", 0);
treeservices.AppendColumn("Name", cellserv2, "text", 1);
treeservices.AppendColumn("Price", cellserv3, "text", 2);
treeservices.Model = Services();
tree2.AppendColumn("Code", new CellRendererText(), "text", 0);
tree2.AppendColumn("Name", new CellRendererText(), "text", 1);
tree2.AppendColumn("Price", new CellRendererText(), "text", 2);
}
ListStore Services()
{
//Returns a ListStore from local MySql Database
}
//Adds a service to tree2 when a row is double clicked
protected void OnTreeservicesRowActivated(object o, RowActivatedArgs args)
{
tree2list.AppendValues(cellserv1.Text, cellserv2.Text, cellserv3.Text);
tree2.Model = tree2list;
}
}
解决方案
在树视图对象上添加 Afterselect 事件
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
//Set TreeNode variable to the selected node
TreeNode Nodetosave = this.treeView1.SelectedNode;
//Add Nodetosave to your second tree in your button event
}
这是我第一次在stackoverflow上回答,如果我错过了任何格式,请原谅。如果要存储多个 TreeNode,则创建一个 TreeNode 列表并添加每个选定的树节点,然后在您的按钮事件中迭代它们并将它们一一添加到您的另一棵树。
推荐阅读
- laravel - 我想安装一个带有“composer require laravelista/comments”的包,但出现错误
- html - 如何修复我所有的页脚链接不被混淆?
- gf - GF 中的关系从句 (which)
- typescript - 如何在 fp-ts 中使用管道删除 if 语句
- xml - 如何使用 eXist-db 将结果“拼接”成单个 XML 文档?
- c# - 虽然 String 是一种引用类型,但为什么“==”运算符在 2 个字符串中表现正确?
- reactjs - 由于 CORS,Spring 和 React websocket 聊天无法正常工作
- java - 错误需要权限 android.permission.CONNECTIVITY_INTERNAL android.permission.MAINLINE_NETWORK_STACK
- neo4j - 查询 Neo4j 的许多日期范围
- android - 在连续中断之前获取最后一个数组列表位置