Источник данных - база данных MS Access;
Сценарий.
- форма "Frm6UC".Пользователь выбирает узел для передачи;
- форма "Frm6UC".Пользователь нажимает «button1»;
- форма «searchNodefrm».Пользователь выбирает, куда двигаться;
- форма "searchNodefrm".Пользователь нажимает «button2» (Выбрать);
- результат.Смотрите картинку.
Вопрос.
Как заставить работать метод TreeList.MoveNode?
Чертежи
![Node selection](https://i.stack.imgur.com/UImxe.png)
![result](https://i.stack.imgur.com/pRrcD.png)
Код «Основная форма»
public partial class Frm6UC : UserControl
{
DataTable dt;
OleDbDataAdapter adapter;
OleDbCommandBuilder cb;
SettingsAplic settings; // настройки
public Frm6UC()
{
InitializeComponent();
}
private void Frm1UC_Load(object sender, EventArgs e)
{
settings = new SettingsAplic();
connect();
treeList1.BeginSort();
treeList1.Columns[0].SortOrder = SortOrder.Ascending;
treeList1.EndSort();
treeList1.Columns[0].Width = 30;
treeList1.Columns[1].Width = 30;
treeList1.Columns[2].Width = 30;
treeList1.Columns[3].Width = 200;
}
public void connect()
{
string catBD = @"c:\test\visualStudio\csharp\01\01.accdb";
string conBD = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", catBD);
OleDbConnection connection = new OleDbConnection(conBD);
connection.Open();
// Выбор
string query1 = "SELECT * FROM TableTreeView_12";
OleDbCommand cmd1 = new OleDbCommand(query1, connection);
dt = new DataTable();
adapter = new OleDbDataAdapter(cmd1);
cb = new OleDbCommandBuilder(adapter);
adapter.Fill(dt);
treeList1.KeyFieldName = "ID";
treeList1.ParentFieldName = "PrID";
treeList1.DataSource = dt;
settings.dt = dt;
}
public void MoveToNode()
{
//** Выбираем место куда требуется перенести узел
// Открываем форму
searchNodefrm searchNdfrm = new searchNodefrm(settings); // запуск формы поиска
searchNdfrm.ShowDialog();
// *** Определяем узел который требуется перенести
TreeListNode curNode; // Текущий узел (который переносится)
curNode = treeList1.FocusedNode;
string curNodeName_isx = curNode.GetValue("NodeName").ToString();
// *** Узел получатель (Родительский узел куда требуется перенести)
TreeListNode recipientNode; // Получатель узла (родительский узел в который переносится). Родительский узел
TreeListNode nodePosition; // Узел где предполагается размещать "переносимый узел". Узел позиции
recipientNode = settings.nodePosition.ParentNode; // Получатель "родительсий узел"
nodePosition = settings.nodePosition; // Узел позиции.
string recipientNode_ = recipientNode.GetValue("NodeName").ToString(); // test
// *** Позиция куда требуется переносить
int position = Convert.ToInt32(nodePosition.GetValue("sorting"));
treeList1.MoveNode(curNode, recipientNode, true, position); // Перемещаем узел
}
private void button1_Click(object sender, EventArgs e)
{
// upMoveNode3();
MoveToNode();
}
}
Настройки класса
public class SettingsAplic
{
public DataTable dt { get; set; }
public TreeListNode nodePosition { get; set; } // Узел "Позиции"
}
Форма выбораузел, куда переместить узел.Форма: "searchNodefrm".
public partial class searchNodefrm : Form
{
SettingsAplic settingsThis;
public searchNodefrm(SettingsAplic settings)
{
InitializeComponent();
settingsThis = settings;
}
private void searchNodefrm_Load(object sender, EventArgs e)
{
// Привязка к ключевым полям
treeList1.KeyFieldName = "ID";
treeList1.ParentFieldName = "PrID";
treeList1.DataSource = settingsThis.dt;
treeList1.BestFitColumns();
}
// Позиция
private void button2_Click(object sender, EventArgs e)
{
settingsThis.nodePosition = treeList1.FocusedNode;
#region test data
string name = treeList1.FocusedNode.GetValue("NodeName").ToString();
textBox2.Text = name;
#endregion test data
textBox2.BackColor = Color.MediumAquamarine;
}
}