Перетаскиваемое поле узла TreeList не обновляется в таблице базы данных. - PullRequest
0 голосов
/ 06 ноября 2018

Источник данных - база данных Access;
Подключение к базе данных - через код;

После перетаскивания «узла» в TreeList порядковый номер «узла» обновляется в поле «сортировки».
Проблема: для перетаскиваемого узла поле «сортировка» в базе данных не обновляется.
Для остальных узлов одного и того же родителя обновление поля работает правильно.

Обновление
Статистика
Начальное состояние. Узел "Node_1" находится в "Parent_1".

  1. "Parent_1" -> "Node_1" -> "Parent_2".
    Перетащите узел «Node_1» из родительского «Parent_1» в «Parent_2». Нумерация поля «сортировка» для узлов в таблице базы данных правильная.

  2. "Parent_2". "Node_2" <-> "Node_1" <-> "Node_3".
    Перетаскивание узла «Node_1» между дочерними узлами «Parent_2».
    Для перетаскиваемого узла поле «сортировка» в базе данных не обновляется.
    Для остальных узлов одного и того же родителя обновление поля работает правильно.

  3. "Parent_1" <- "Node_1" <- "Parent_2". <br> Перетаскивание узла «Node_1» из родительского «Parent_2» в «Parent_1» - в строке adapter.Update (dt); ошибка: «Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей».

Как заставить программу корректно обновлять поле «сортировка» при перетаскивании узла в древовидный список и в базу данных?

начальное состояние
drag

картинка с ошибкой
настройки

//
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Nodes;

namespace rsh
{
    public partial class Form1 : Form
    {
        DataTable dt;        
        OleDbDataAdapter adapter;
        OleDbCommandBuilder AccessCommandBuilder;


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            connect();

            //
            UpdateNodesPositions(treeList1.Nodes);
            treeList1.ExpandAll();
        }

        #region *** DB *** 

        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);
            AccessCommandBuilder = new OleDbCommandBuilder(adapter);

            adapter.Fill(dt);


            treeList1.KeyFieldName = "ID";
            treeList1.ParentFieldName = "PrID";

            treeList1.DataSource = dt;

        }

        public void Save()
        {
            adapter.Update(dt);
        }
        #endregion *** DB *** 

        private void treeList1_AfterDragNode(object sender, DevExpress.XtraTreeList.AfterDragNodeEventArgs e)
        {
            SaveNewRecordPosition(e);
        }

        private void SaveNewRecordPosition(NodeEventArgs e)
        {

            var nodes = e.Node.ParentNode == null
                        ? e.Node.TreeList.Nodes
                        : e.Node.ParentNode.Nodes;

            richTextBox1.Clear();
            for (var i = 0; i < nodes.Count; i++)
            {
                nodes[i].SetValue(0, i);


                string id = nodes[i].GetValue(0).ToString();
                string s = nodes[i].GetValue(1).ToString();

                richTextBox1.Text += id + " -//- " + s + "\r\n";

            }

            Save();

        }

        private void UpdateNodesPositions(TreeListNodes nodes)
        {
            var ns = new List<TreeListNode>();
            foreach (TreeListNode n in nodes)
            {
                ns.Add(n);
            }
            foreach (TreeListNode n in ns)
            {
                UpdateNodesPositions(n.Nodes);
                n.TreeList.SetNodeIndex(n, Convert.ToInt32(n.GetValue("sorting")));
            }
        }



    }
}
...