正在拖动的TreeList节点字段未在数据库表中更新

时间:2018-11-06 10:11:18

标签: c# winforms devexpress devexpress-windows-ui

数据源是Access数据库;
通过代码连接到数据库;

将“节点”拖动到TreeList中后,在“排序”字段中更新“节点”的序列号。
问题:对于要拖动的节点,数据库中的“排序”字段未更新。
 对于同一父级中的其余节点,字段更新正常工作。

更新
统计
初始状态。节点“ Node_1”位于“ Parent_1”中。

  1. “父母1”->“节点_1”->“父母2”。
    将节点“ Node_1”从父“ Parent_1”拖到“ Parent_2”。 数据库表中节点的“排序”字段编号正确。

  2. “父母_2”。 “ Node_2” <->“ Node_1” <->“ Node_3”。
    在子节点“ Parent_2”之间拖动节点“ Node_1”。
     对于要拖动的节点,数据库中的“排序”字段不会更新。
    对于同一父节点中的其余节点,字段更新正常工作。

  3. “父母_1” <-“节点_1” <-“父母_2”。
    在行adapter.Update (dt);中将节点“ Node_1”从父“ Parent_2”拖到“ Parent_1”-错误:“并发冲突:UpdateCommand影响了预期的1个条目中的0个。”

如何在拖动树列表和数据库中的节点时使程序正确更新“排序”字段?

initial state
drag

picture with error
settings

//
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")));
            }
        }



    }
}

0 个答案:

没有答案