数据源是Access数据库;
通过代码连接到数据库;
将“节点”拖动到TreeList中后,在“排序”字段中更新“节点”的序列号。
问题:对于要拖动的节点,数据库中的“排序”字段未更新。
对于同一父级中的其余节点,字段更新正常工作。
更新
统计
初始状态。节点“ Node_1”位于“ Parent_1”中。
“父母1”->“节点_1”->“父母2”。
将节点“ Node_1”从父“ Parent_1”拖到“ Parent_2”。
数据库表中节点的“排序”字段编号正确。
“父母_2”。 “ Node_2” <->“ Node_1” <->“ Node_3”。
在子节点“ Parent_2”之间拖动节点“ Node_1”。
对于要拖动的节点,数据库中的“排序”字段不会更新。
对于同一父节点中的其余节点,字段更新正常工作。
“父母_1” <-“节点_1” <-“父母_2”。
在行adapter.Update (dt);
中将节点“ Node_1”从父“ Parent_2”拖到“ Parent_1”-错误:“并发冲突:UpdateCommand影响了预期的1个条目中的0个。”
如何在拖动树列表和数据库中的节点时使程序正确更新“排序”字段?
//
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")));
}
}
}
}