Заполнение treeview до N уровней в C# из базы данных без какого-либо целочисленного столбца
Я хочу TreeView как:-
A-1 (Родительский Узел)
---A01-(Подузел A)
-------A0101-(Подузел A01)
........
B-1 (Родительский Узел)
----B01-(Подузел B)
-------B0101-(Подузел B01)
.......
C-1 (Родительский Узел)
.
.
.
Что я уже пробовал:
SqlCommand cmd = new SqlCommand("SELECT SUBSTRING(BCD,1,1)[PARENT], BCD, DESCRIPTION from BALANCE_SHEET where TYPE = 'S' GROUP BY BCD, DESCRIPTION", con); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(DT); var treeParent = DT.AsEnumerable().Select(a => a.Field<string>("parent")).Distinct(); int count = 0; foreach(string row in treeparent) { var des = DT.AsEnumerable().Where(b => b.Field <string>("BCD") == row).CopyToDataTable(); string ParentNode = row + " - " + Des.Rows[0]["DESCRIPTION"].ToString(); TreeViewBcd.Nodes.Add(ParentNode); var dtnodeList = DT.AsEnumerable().Where(c => c.Field<string>("BCD").Contains(row) && !Equals(row.Substring(0))).CopyToDataTable(); foreach(DataRow dataRow in dtnodeList.Rows) { if (!dataRow["BCD"].ToString().Equals(row)) { string childNode = dataRow.ItemArray[1].ToString() + " - " + dataRow.ItemArray[2].ToString(); TreeViewBcd.Nodes[count].Nodes.Add(childNode); } } count++; } con.Close();
Richard Deeming
Редактору удалось сломать форматирование вашего кода. Я думаю, что теперь мне удалось это исправить.
Теперь вам нужно объяснить, в чем проблема.
Kornfeld Eliyahu Peter
Правильно ли я понимаю (из вашего SQL), что первая буква идентификатора узла-это идентификатор родительского узла? Теперь это совсем не соответствует образцу, который вы дали выше...
Чтобы создать хорошую привязку дерева, вы должны вернуться из SQL с 3 столбцами для каждого узла: parent id, node id, text (где parent id будет равен null для корня(2))...
j snooze
Я предполагаю, что вы хотите, чтобы ваши результаты SQL были ближе к тому, что даст этот маленький образец SQL...это предполагает, что ваше значение BCD последовательно составляет 1 символ, а дочерние значения постоянно добавляются к корневому символу длиной 2 символа. Таким образом, это просто возвращает родителя как BCD менее 2 символов... Поскольку я не знаю, так это или нет, это что-то, чтобы зажечь идею, чтобы, возможно, помочь вам закончить то, что вы пытаетесь выполнить.
выберите дело
когда len(BCD) = 1, то BCD
Else substring(BCD,1,len(BCD)-2)
Конец как родитель,
BCD,
Описание
из Balance_Sheet, где type = 'S'