Как сделать копирование и вставку строк таблицы для дерева?

172
14 апреля 2019, 20:20

Имеется таблица базы данных.
На основании таблицы формируется дерево.
Поле ID автоинкремент (формируется базой данных).

Сценарий:

  1. Пользователь. Выбирает узел, который нужно копировать;
  2. Пользователь. Выбирает узел куда нужно копировать;
  3. Приложение. Получает строку узла, который нужно копировать;
  4. Приложение. Копирует строку DataTable и связанные с ней строки в качестве дочерних строк (узлов) в узел, который указан как "получатель";
  5. Приложение. Обновляет таблицу базы данных на основании изменений DataTable.

Вопрос.
Как выполнить программно "копировать" и "вставить" для определённой записи таблицы(DataTable) и её дочерних узлов(строк) и чтобы копирование применялось для узлов различной степени вложенности?
В вопросе имеется ввиду как выполнить п.3, п.4.

Результат копирования должен привести к тому, что в DataTable появятся дополнительные строки:
ID // PrID // sorting // NodeName // field_1 // field_2 // field_3
18 16 0 AA Node Level_2
19 18 0 AAA Node Level_3
20 19 0 AAAA Node Level_4
21 19 1 AAAB Node Level_4
23 19 2 AAAC Node Level_4_Изм_3

Код подключения

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_0";
            OleDbCommand cmd1 = new OleDbCommand(query1, connection);

            dt = new DataTable();
            adapter = new OleDbDataAdapter(cmd1);
            cb = new OleDbCommandBuilder(adapter);
            adapter.Fill(dt);
        }

Исходная таблица
ID // PrID // sorting // NodeName // field_1 // field_2 // field_3
1 0 0 A Node Level_1_изм_2
2 1 0 AA Node Level_2
3 2 0 AAA Node Level_3
4 3 0 AAAA Node Level_4
5 3 1 AAAB Node Level_4
6 3 2 AAAC Node Level_4_Изм_3
7 1 1 AB Node Level_2
8 1 2 AC Node Level_2
9 0 1 B Node Level_1
10 9 0 BA Node Level_2
11 9 1 BB Node Level_2
12 9 2 BC Node Level_2
13 0 2 C Node Level_1
14 13 0 CA Node Level_2
15 13 1 CB Node Level_2
16 13 2 CC Node Level_2
17 13 3 CD Node Level_2

Answer 1

Вам надо у копируемой строки изменить "Pr ID" с 1 на 16. Ну это если говорить про ваш пример. В общем случае изменить у копируемой строки атрибут "Pr ID" на значение атрибута первичного ключа (атрибут ID) строки в которую вы копируете. После этого вызвать сохранение данных.

static void CopyNode(DataRow selecttedRow, DataRow targetRow)
{
    selecttedRow["Pr ID"] = targetRow["ID"];
}

Ну и вызываете сохранение данных из адаптера в базу.

READ ALSO
Не загружается картинка с помощью CostaRico/yii2-images

Не загружается картинка с помощью CostaRico/yii2-images

использую CostaRico/yii2-images для вывода изображение записи из бд, но метод getUrl создает странную ссылку в итоге ссылка не существует в чем может быть...

152
Отправить запрос на ip через curl

Отправить запрос на ip через curl

Пробую отправить запрос на ip нужного сайта через curlВначале отправил через постман такой запрос:

192
Можно ли как-то быстро включить / отключить xdebug? Без изменения php.ini и перезагрузки сервера?

Можно ли как-то быстро включить / отключить xdebug? Без изменения php.ini и перезагрузки сервера?

Страницы моего сайта без xdebug грузятя за несколько миллисекунд, а с xdebug за 5 секунд - минимумА бывает и дольше

165
Как сделать MySQL AUTO_INCREMENT uniqe id рандомальный?

Как сделать MySQL AUTO_INCREMENT uniqe id рандомальный?

Как сделать к примеру ID 600000 при добавлении новой строчки? Чтоб был рандом например 6000023 следущий 6000073 и так далее

141