Как создать древовидное представление для следующей таблицы с помощью элемента управления treeview в C#
он доносится из-за стола.
l1 l2 l3
б ВВ, ВВН
б ББ Би-би-си
в ВС ШПД
я хочу, чтобы treeview был чем-то вроде этого
б
---ББ
------ВВН
------ВВС
---британская Колумбия
------bba
Что я уже пробовал:
Я новичок в c# любезно помогите и, пожалуйста, дайте мне знать простой способ его реализации.
BillWoodruff
Это WinForm ? Сложность решения будет зависеть от того, в какой степени DataTable имеет регулярную, инвариантную структуру.
Graeme_Grant
Ваша догадка так же хороша, как и моя
BillWoodruff
Мне ясно, что я не буду писать код, если контекст не будет ясен.
-Я не просвещаю тех, кто не горит желанием учиться.,
и не будите тех, кто не тревожится
дать объяснение самим.
Если я представил один угол квадрата
и они не могут вернуться ко мне с остальными тремя,
Я не должен снова возвращаться к этим пунктам."
Из "Аналектов" Конг Фузи (Конфуция), примерно 2500 лет назад
:)
Graeme_Grant
Виды деревьев в значительной степени одинаковы ... так что это не требовало никаких усилий ... но я понимаю, откуда вы пришли.
BillWoodruff
"TreeViews почти все одинаковы ..." я не согласен: WinForm TreeView не имеет эквивалента многим функциям WebUI, таким как "PopulateOnDemand".
Graeme_Grant
В том, как они работают с иерархическими данными, они одинаковы, каждая платформа имеет свои нюансы, как вы указываете.
Вы правы, не все платформы имеют "заполнение по требованию", WPF-это другое. Но с небольшим творческим потенциалом это не так уж трудно подражать. WinForms, например, может быть реализован примерно так:
private void Form1_Load(object sender, EventArgs e) { // initialise the tree here var nodeSomething = treeView1.Nodes.Add("Something"); nodeSomething.Nodes.Add("Something below something"); treeView1.AfterExpand += AfterExpand; } private void AfterExpand(object sender, TreeViewEventArgs e) { foreach (TreeNode node in e.Node.Nodes) { // skip if we have already loaded data for this node if (node.Tag != null) continue; node.Tag = new object(); node.Nodes.AddRange(GetDataForThisNode(node)); } }
BillWoodruff
Я восхищаюсь вашим плодовитым кодированием ! То, что вы показали здесь,-это своего рода эскиз/модель для загрузки по требованию, что здорово, но не имеет ничего общего с проблемами ОП ... какими бы они ни были.
У OP есть (мы надеемся) DataTable: мы не знаем, использует ли этот DataTable 'Childrow и т. д.; Мы не знаем, знает ли OP о привязке данных. Мы не знаем, имеет ли ОП хоть какое-то представление о том, что ему действительно нужно знать :)
Моя цель-заставить ОП прояснить, что они делают.
Graeme_Grant
Да, сообщение ОП было немного расплывчатым, поэтому я выбросил немного кода в надежде открыть дальнейший диалог.
Приведенный выше код был адресован только вашему комментарию о "заполнении по требованию". И да, я действительно открылся для этих комментариев. :)
Graeme_Grant
Есть ли шанс, что вы сможете уточнить, что именно вам нужно? Более конкретная информация поможет дать более конкретный ответ.
Пожалуйста, нажмите на ссылку "улучшить вопрос", чтобы обновить более конкретную информацию. Если вы не уверены в том, как это сделать, следующая ссылка объяснит, как это сделать.: Часто задаваемые вопросы - Как улучшить свой вопрос[^]