powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Заполнение TreeView
26 сообщений из 26, показаны все 2 страниц
Заполнение TreeView
    #35274575
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветик, Всем!!!
Знаю, что эта тема обсуждалась и не один раз, но все равно не получается написать небольшой код заполнения дерева из таблицы БД...
Я стянула на форму элемент TreeView, а дальше пытаюсь заполнить его, вот код...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
private void NodeAdder(string id_tipGSM, TreeNode tn2Add)
        {
            // Создадим условие, при котором рекурсия будет прервана
            // Она должна прерваться, если у записи нет подчинённых записей
            // Вот мы их и посчитаем
            int counter = 0;
            foreach (DataRow drow in autoTransportDataSet.TreeTipGSM.Rows)
            {
                if (drow["parent_id"].ToString() == id_tipGSM)
                {
                    counter++;
                }
            }
            if (counter == 0)
            {
                return;
            }

            // Теперь прицем детей к родительской ветки
            // Если детей нет, то мы вышли шагом раньше
            foreach (DataRow drow in autoTransportDataSet.TreeTipGSM.Rows)
            {
                if (drow["parent_id"].ToString() == id_tipGSM)
                {
                    TreeNode tnGSM = new TreeNode(drow["NameTipGSM"].ToString().Trim());
                    NodeAdder(drow["id_tipGSM"].ToString(), tnGSM);
                    /* Объект, прицепляемый к родительским веткам*/
                    TagInfoGSM  tinfoGSM = new TagInfoGSM();
                    tinfoGSM.id_tipGSM = Convert.ToInt32(drow["id_tipGSM"]);
                    tinfoGSM.parent_id = Convert.ToInt32(drow["parent_id"]);
                    tinfoGSM.NameTipGSM = (string)drow["NameTipGSM"];
                    tinfoGSM.plotnostGSM = (string) drow["PlotnostGSM"];
                    tnGSM.Tag = tinfoGSM;
                    /*---*/
                    tn2Add.Nodes.Add(tnGSM);
                    treeView1.Refresh();

                }
            }
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (((TagInfoGSM)e.Node.Tag).parent_id != 0)
            {
                treeTipGSMBindingSource.Filter = "id_tipGSM = " + ((TagInfoGSM)e.Node.Tag).id_tipGSM;
            }
            else
            {
                treeTipGSMBindingSource.Filter = "";
            }
            
            id_tipGSMTextBox.Refresh();
            parent_idTextBox.Refresh();
            nameTipGSMTextBox.Refresh();
            plotnostGSMTextBox.Refresh();

        }
Плюс ко всему, я хочу что бы выбранная ветка в дереве могла редактироваться в этой же форме в TextBox... но почему-то не получается ни заполнить дерево, ни отобразить выбранную ветку в текстовом поле... Хотя это рабочий код, я его использовала на другой форме для заполнения...
Надеюсь на Вашу помочь...
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35277647
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все тут хорошо работает, просто забыла про заполнение при загрузке формы...
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35281293
Алекандр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста...

у меня есть табличка со связью сама на себя... получается что-то типа бесконечных папок...
так вот как это дело загрузить в TreeView из базы.. ни чего не получается :(
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35283334
rdfg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рекурсия поможет
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35595908
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите правильно заполнить treeview, если таблица имеет следующий вид:
id,
parent_1,
parent_2,
item_name
а код заподнения использую самый верхний
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35596183
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По образу и подобию.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
private void button_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    BindingSource bindingSource = new BindingSource();
    bindingSource.DataSource = dt;

    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Value", typeof(string));
    dt.Columns.Add("Parent_Id", typeof(int));

    dt.Rows.Add(1, "value1", 0);
    dt.Rows.Add(2, "value2", 0);
    dt.Rows.Add(3, "value3", 0);
    dt.Rows.Add(4, "value4", 1);
    dt.Rows.Add(5, "value5", 1);
    dt.Rows.Add(6, "value6", 1);
    dt.Rows.Add(7, "value7", 2);
    dt.Rows.Add(8, "value8", 3);
    dt.Rows.Add(9, "value9", 3);
    dt.Rows.Add(10, "value10", 7);

    // 1 способ - с рекурсией (красивее)
    FillTreeView(treeView1, dt);

    // 2 способ - без рекурсии (чуточку шустрее)
    FillTreeView2(treeView1, bindingSource);

}

// ***************** 1 способ ***********************************************************

/// <summary>
///  Заполнение дерева из БД
/// </summary>
/// <param name="treeView"></param>
/// <param name="dt"></param>
private void FillTreeView(TreeView treeView, DataTable dt)
{
    treeView.Nodes.Clear();
    DataRow[] rows = dt.Select("Parent_Id = 0");
    foreach (DataRow row in rows)
    {
        TreeNode node = new TreeNode(row["Value"].ToString());
        node.Tag = row["Id"];
        treeView.Nodes.Add(node);
        FillNode(node, dt);
    }
}

/// <summary>
///  Добавление к ноде чилдов
/// </summary>
/// <param name="parentNode"></param>
/// <param name="dt"></param>
private void FillNode(TreeNode parentNode, DataTable dt)
{
    DataRow[] rows = dt.Select(string.Format("Parent_Id = {0}", parentNode.Tag));
    foreach (DataRow row in rows)
    {
        TreeNode treeNode = new TreeNode(row["Value"].ToString());
        treeNode.Tag = row["Id"];
        parentNode.Nodes.Add(treeNode);
        FillNode(treeNode, dt);
    }
}

// **************************************************************************************




// ***************** 2 способ ***********************************************************

/// <summary>
///  Заполнение дерева из БД
/// </summary>
/// <param name="treeView"></param>
/// <param name="bindingSource"></param>

private void FillTreeView2(TreeView treeView, BindingSource bindingSource)
{
    treeView.Nodes.Clear();
    bindingSource.Position = 0;
    for (int i = 0; i < bindingSource.Count; i++)
    {
        //Application.DoEvents();
        DataRow dr = (bindingSource.Current as DataRowView).Row;

        int id = Convert.ToInt32(dr["id"]);
        int parent_id = Convert.ToInt32(dr["parent_id"]);
        string name = dr["value"].ToString();

        if (parent_id == 0)
            treeView.Nodes.Add(FillNode(id, name));
        else
        {
            TreeNode[] treeNodes = treeView.Nodes.Find(parent_id.ToString(), true);
            if (treeNodes.Length != 0)
                (treeNodes.GetValue(0) as TreeNode).Nodes.Add(FillNode(id, name));
        }
        bindingSource.MoveNext();
    }
}

/// <summary>
/// Создание новой ноды
/// </summary>
/// <param name="id"></param>
/// <param name="name"></param>
/// <returns>TreeNode</returns>
private TreeNode FillNode(int id, string name)
{
    TreeNode treeNode = new TreeNode();
    treeNode.Tag = id;
    treeNode.Name = id.ToString();
    treeNode.Text = name;
    return treeNode;
}

// **************************************************************************************
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35640046
St17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такой вопрос. кода много в теме. не разобрался. я пробую заполнить данными из бд. ток чет не совсем получаеться. подскажите как правильно заполнить.
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35640056
St17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотяб одну ветку родитель 1 и дети2
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35640092
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи, объясните, зачем по тысяче раз задавать вопросы, ответы на которых находятся:

а) поиском по форуму
б) в специализированной литературе
в) в MSDN?

Что за привычка: чуть что не получается - сразу постить на форум? Я смотрю последние темы и просто тихо фигею: как открыть форму, как закрыть форму, как считать данные с базы, как отсортировать ComboBox...
Скоро будут спрашивать, как открыть Visual Studio и что дальше с ней сделать, чтоб получилось круто.

Примеров по заполнению TreeView - полно. Открывайте и разбирайтесь.

Извините, накипело.
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35640208
St17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вехде ишю . прочитал все статьи. написалже не пойму. сижу на мсдн. тут пока глухо. англиский плохо знаю долго перевожу. вот и попросил пример. былбы учебник не спрашивал бы
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35640219
St17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот такой я халявщик не хочу нече делать. дайте мне код. сижу уже 3 часа без перерыва изучаю.
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35640236
St17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори.
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934156
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две таблицы связанные между собой, одна - родитель, а вторая - дочь... хочу построить дерево, которое будет отображать в главных узлах родителя и соответственно им дочь...
Структура таблицы родителя - id, name... Структура дочки - id, name, idparent
Только не пинать...
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934298
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LinelТолько не пинать...
а какие еще варианты есть?
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934319
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Варианты есть разные... дерево у меня получается, как выше написано, немного подправила и все ОК!!! а когда две таблицы - проблема...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
foreach (DataRow dr1 in table1)
{
   treeview1.Nodes.Add(new TreeNode(dr1["Name"]));

   foreach (DataRow dr2 in table2)
 {
    if (dr2["parent_id"].ToString()==dr1["id"].ToString())
   {
      //Вот тут и не получается
   }
 }

}
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934330
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
foreach (DataRow dr1 in table1)
{
TreeNode node = new TreeNode(dr1["Name"]);
   treeview1.Nodes.Add(node);

   foreach (DataRow dr2 in table2)
 {
    if (dr2["parent_id"].ToString()==dr1["id"].ToString())
   {
     node.Add(new TreeNode(dr2["Name"]);
   }
 }

}
я вот думаю - это весеннее отупление?
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934335
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наверное конец рабочего дня
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934337
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Linelнаверное конец рабочего дня
кстате - ваш код далек от оптимального. лень править. весеннее обленение...
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934348
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но Ваш тоже не работает
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934374
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я и не говорил, что будет работать :))
и ваще, тетя, не компилируется и не работает - разные вещи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
foreach (DataRow dr1 in table1.Rows)
            {
            TreeNode node = new TreeNode(dr1["Name"].ToString());
               treeview1.Nodes.Add(node);

               foreach (DataRow dr2 in table2.Rows)
             {
                if (dr2["parent_id"].ToString()==dr1["id"].ToString())
               {
                 node.Nodes.Add(new TreeNode(dr2["Name"].ToString()));
               }
             }

            }
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934376
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
winsky!Linelнаверное конец рабочего дня
кстате - ваш код далек от оптимального. лень править. весеннее обленение...
немного "поколдовала" и заработал...
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35934397
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть предложение - в цикле, который внутре (вложенный), бегать не по всей таблице а по отфильтрованному набору (по parent_id)
...
Рейтинг: 0 / 0
Заполнение TreeView
    #35937849
Linel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если попробовать оформить это красиво через рекурсию... вот пример кода, но в нем есть ошибка с переполнением... Подскажите как исправить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
public class TagInfoTipTS
        {
            public int id_TipTSMain;
            public string NameTipTSMain;

            public int id_TipTS;
            public string NameTipTS;
            public int id_parentMain;

        }

// ... при загрузке формы заполняем дерево

            #region заполняем дерево
            TagInfoTipTS tinfoTS;
            treeView1.BeginUpdate();
            foreach (DataRow drow in autoTransportDataSet.TipTSMain.Rows)
            {
               
                    TreeNode tn = new TreeNode(drow["NameTipTSMain"].ToString().Trim());
                    tinfoTS = new TagInfoTipTS();
                    tinfoTS.id_TipTSMain = Convert.ToInt32(drow["id_TipTSMain"]);
                    tinfoTS.NameTipTSMain = (string)drow["NameTipTSMain"];
                    tn.Tag = tinfoTS;
                    /*---*/
                    NodeAdder(drow["id_TipTSMain"].ToString(), tn);
                    treeView1.Nodes.Add(tn);
                
            }
            treeView1.EndUpdate();
            #endregion



private void NodeAdder(string id, TreeNode tn2Add)
        {
             int counter = 0;
            foreach (DataRow drow in autoTransportDataSet.TipTS.Rows)
            {
                if (drow["id_TipTSMain"].ToString() == id)
                {
                    counter++;
                }
            }
            if (counter == 0)
            {
                return;
            }

            foreach (DataRow drow in autoTransportDataSet.TipTS.Rows)
            {
                if (drow["id_TipTSMain"].ToString() == id)
                {
                    TreeNode tn = new TreeNode(drow["NameTipTS"].ToString().Trim());
                    NodeAdder(drow["id_TipTSMain"].ToString(), tn);
                    TagInfoTipTS tinfoTipTS = new TagInfoTipTS();
                    tinfoTipTS.id_TipTS = Convert.ToInt32(drow["id_TipTS"]);
                    tinfoTipTS.NameTipTS = (string)drow["NameTipTS"];
                    tinfoTipTS.id_parentMain = Convert.ToInt32(drow["id_TipTsMain"]);
                    tn.Tag = tinfoTipTS;
                    /*---*/
                    tn2Add.Nodes.Add(tn);

                }
            }
        }
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Заполнение TreeView
    #39468800
WertAndrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО! единственный, кто ясно и доступно все расписал!

МСУПо образу и подобию.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
private void button_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    BindingSource bindingSource = new BindingSource();
    bindingSource.DataSource = dt;

    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Value", typeof(string));
    dt.Columns.Add("Parent_Id", typeof(int));

    dt.Rows.Add(1, "value1", 0);
    dt.Rows.Add(2, "value2", 0);
    dt.Rows.Add(3, "value3", 0);
    dt.Rows.Add(4, "value4", 1);
    dt.Rows.Add(5, "value5", 1);
    dt.Rows.Add(6, "value6", 1);
    dt.Rows.Add(7, "value7", 2);
    dt.Rows.Add(8, "value8", 3);
    dt.Rows.Add(9, "value9", 3);
    dt.Rows.Add(10, "value10", 7);

    // 1 способ - с рекурсией (красивее)
    FillTreeView(treeView1, dt);

    // 2 способ - без рекурсии (чуточку шустрее)
    FillTreeView2(treeView1, bindingSource);

}

// ***************** 1 способ ***********************************************************

/// <summary>
///  Заполнение дерева из БД
/// </summary>
/// <param name="treeView"></param>
/// <param name="dt"></param>
private void FillTreeView(TreeView treeView, DataTable dt)
{
    treeView.Nodes.Clear();
    DataRow[] rows = dt.Select("Parent_Id = 0");
    foreach (DataRow row in rows)
    {
        TreeNode node = new TreeNode(row["Value"].ToString());
        node.Tag = row["Id"];
        treeView.Nodes.Add(node);
        FillNode(node, dt);
    }
}

/// <summary>
///  Добавление к ноде чилдов
/// </summary>
/// <param name="parentNode"></param>
/// <param name="dt"></param>
private void FillNode(TreeNode parentNode, DataTable dt)
{
    DataRow[] rows = dt.Select(string.Format("Parent_Id = {0}", parentNode.Tag));
    foreach (DataRow row in rows)
    {
        TreeNode treeNode = new TreeNode(row["Value"].ToString());
        treeNode.Tag = row["Id"];
        parentNode.Nodes.Add(treeNode);
        FillNode(treeNode, dt);
    }
}

// **************************************************************************************




// ***************** 2 способ ***********************************************************

/// <summary>
///  Заполнение дерева из БД
/// </summary>
/// <param name="treeView"></param>
/// <param name="bindingSource"></param>

private void FillTreeView2(TreeView treeView, BindingSource bindingSource)
{
    treeView.Nodes.Clear();
    bindingSource.Position = 0;
    for (int i = 0; i < bindingSource.Count; i++)
    {
        //Application.DoEvents();
        DataRow dr = (bindingSource.Current as DataRowView).Row;

        int id = Convert.ToInt32(dr["id"]);
        int parent_id = Convert.ToInt32(dr["parent_id"]);
        string name = dr["value"].ToString();

        if (parent_id == 0)
            treeView.Nodes.Add(FillNode(id, name));
        else
        {
            TreeNode[] treeNodes = treeView.Nodes.Find(parent_id.ToString(), true);
            if (treeNodes.Length != 0)
                (treeNodes.GetValue(0) as TreeNode).Nodes.Add(FillNode(id, name));
        }
        bindingSource.MoveNext();
    }
}

/// <summary>
/// Создание новой ноды
/// </summary>
/// <param name="id"></param>
/// <param name="name"></param>
/// <returns>TreeNode</returns>
private TreeNode FillNode(int id, string name)
{
    TreeNode treeNode = new TreeNode();
    treeNode.Tag = id;
    treeNode.Name = id.ToString();
    treeNode.Text = name;
    return treeNode;
}

// **************************************************************************************
...
Рейтинг: 0 / 0
Заполнение TreeView
    #39468815
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты 8 лет осмысливал код?
...
Рейтинг: 0 / 0
Заполнение TreeView
    #39469357
WertAndrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Супер_ПавТы 8 лет осмысливал код?

я на днях вообще впервые взялся за ASP.Net и С#... понадобился treeview, вот и рыскал по и-нету...
приемлемое объяснение нашел только тут
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Заполнение TreeView
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]