Рекурсивное построение TreeView из таблицы MSSql

DracoDier
Дата: 16.06.2014 17:50:38
С# только изучаю, не судите строго.
Необходимо построить TreeView базируясь на данных таблицы MSSql.
Содержимое таблицы :

idSerials NameOriginal NomerSezon NomerSerii
1 Сериал 1 Сезон 1 1х1
2 Сериал 1 Сезон 1 1х2
3 Сериал 1 Сезон 2 2х1
4 Сериал 1 Сезон 2 2х2
5 Сериал 2 NULL 1х1
6 Сериал 2 NULL 1х2
7 Сериал 3 NULL NULL



Должно быть :

Сериал 1
Сезон 1
1х1
1х2
Сезон 2
2х1
2х2
Сериал 2
1х1
1х2
Сериал 3



Мой код :

private void BuildingTreeView1()
{
SqlDataAdapter da = new SqlDataAdapter(@"Select NameOriginal, NomerSezona, NomerSerii from Serials", con);
DataSet ds = new DataSet();
da.Fill(ds, "Serials");

foreach (DataRow dr in ds.Tables["Serials"].Rows)
{
TreeNode tn = new TreeNode(dr["NameOriginal"].ToString());


foreach (DataRow dr2 in ds.Tables["Serials"].Rows)
{
TreeNode ctn = new TreeNode(dr2["NomerSezona"].ToString());
foreach (DataRow dr3 in ds.Tables["Serials"].Rows)
{
TreeNode gctn = new TreeNode(dr3["NomerSerii"].ToString());
ctn.Nodes.Add(gctn);
}
tn.Nodes.Add(ctn);
}
treeView1.Nodes.Add(tn);
}



Код отрабатывает, выстраивает трехступенчатый TreeView, но при этом в child и grandchild попадает parent.... Проще говоря "каша"...

Подскажите, где накосячил?
Заранее спасибо.
VIT2708
Дата: 16.06.2014 18:25:18
DracoDier,

Инструкция и пример в файле
DracoDier
Дата: 17.06.2014 09:41:42
Спасибо. Попробую разобраться.

А так невидно, где у меня то в коде косяк?
pation
Дата: 17.06.2014 11:33:01
DracoDier
А так невидно, где у меня то в коде косяк?

видно, косяк в том, что у тебя всё в одной кучи и юай и бл и дал
DracoDier
Дата: 17.06.2014 12:13:40
Так если видно - помогите. Об этом и прошу вроде бы...
pation
Дата: 17.06.2014 12:16:03
DracoDier
Так если видно - помогите. Об этом и прошу вроде бы...

так я уже написал, исправь и всё у тебя будет
Где-то в степи
Дата: 17.06.2014 12:29:25
DracoDier,
private void BuildingTreeView1()
{
SqlDataAdapter da = new SqlDataAdapter(@"Select NameOriginal, NomerSezona, NomerSerii from Serials", con);
DataSet ds = new DataSet();
da.Fill(ds, "Serials");

foreach (DataRow dr in ds.Tables["Serials"].Rows)
{
TreeNode tn = new TreeNode(dr["NameOriginal"].ToString());


foreach (DataRow dr2 in ds.Tables["Serials"].Rows)
{
TreeNode ctn = new TreeNode(dr2["NomerSezona"].ToString());
foreach (DataRow dr3 in ds.Tables["Serials"].Rows)
{
TreeNode gctn = new TreeNode(dr3["NomerSerii"].ToString());
ctn.Nodes.Add(gctn);
}
tn.Nodes.Add(ctn);
}
treeView1.Nodes.Add(tn);
}

замечательный код, но каждая строчка имеет смысловое определение, может не стоить лепить все в одну кучу
а задуматься как строится дерево, ( думать не запрещается?)
можно пройтись по делая выборку
таким способом: написал чисто интуитивно
 foreach (var source in ds.Tables["Serials"].Rows.OfType<DataRow>().Select(a => a["NameOriginal"]).Distinct()) 
            {
                var source1 = source;
                foreach (var s in ds.Tables["Serials"].Rows.OfType<DataRow>().Where(a=>source1!=null&&(string) a["NameOriginal"]==source1.ToString()).Select(c=>c["Serials"]).Distinct())
                {
                    
                }
            }

можно выбрать каждую корневую ноду как сложный объект и потом строить дерево.
единственное что рвет шаблон это:
автор
5 Сериал 2 NULL 1х1
6 Сериал 2 NULL 1х2
VIT2708
Дата: 17.06.2014 12:33:00
DracoDier
Спасибо. Попробую разобраться.

А так невидно, где у меня то в коде косяк?
VIT2708
Дата: 17.06.2014 12:33:24
DracoDier
Спасибо. Попробую разобраться.

А так невидно, где у меня то в коде косяк?


Судя по коду ты заполняешь только Parent Nodes дочерние ноды ты не заполняешь то есть ты все "пихаешь" в кучу.

PS: лучше посмотри файл я думаю так будет проще
DracoDier
Дата: 18.06.2014 13:47:10
Спасибо всем. Разобрался. Дерево заполняется теперь правильно.