Метод «TreeList.MoveNode» не передает узел? - PullRequest
0 голосов
/ 13 ноября 2018

Источник данных - база данных MS Access;

Сценарий.
- форма "Frm6UC".Пользователь выбирает узел для передачи;
- форма "Frm6UC".Пользователь нажимает «button1»;
- форма «searchNodefrm».Пользователь выбирает, куда двигаться;
- форма "searchNodefrm".Пользователь нажимает «button2» (Выбрать);
- результат.Смотрите картинку.

Вопрос.
Как заставить работать метод TreeList.MoveNode?

Чертежи
Node selection

result

enter image description here Код «Основная форма»

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...