User98743 Ответов: 1

Какой тип списка< gt; Я должен использовать для хранения данных в winforms treeview?


У меня есть класс DBObj, который содержит информацию о базах данных SQL Server и MS Access, такую как имя базы данных, сервер, путь и идентификатор.

У меня есть элемент управления TreeView, в котором текстовая метка каждого TreeView - это имя базы данных.

Я хотел бы сделать один вызов БД, который заполняет список<dbobj>, Но я не хочу заглядывать в список, чтобы получить имя базы данных, которое будет заполнять TreeView.

Я не очень хорошо знаком со списками, поэтому не уверен ни в том, что доступно, ни в том, как это сделать.

Может быть,что-то вроде List<DBName, DBObj> ?

Любые предложения были бы великолепны.

Что я уже пробовал:

Я попробовал сделать это старомодным способом, создав список скалеров строк, которые содержали пути к базе данных, а затем при каждом извлечении пути к базе данных из списка я выполняю поиск в БД, чтобы найти остальную часть информации.

Моя теория заключается в том, что это станет ресурсоемким, однако, если вы считаете, что это ошибка, пожалуйста, дайте мне знать.

BillWoodruff

"текстовая метка каждого TreeView" я думаю, что Вы имеете в виду каждый TreeNode.

если вы используете TreeView, я предполагаю, что вы имеете дело с объектами в иерархии; но ваш пост, похоже, описывает просто "плоскую" коллекцию. Пожалуйста, уточните.

1 Ответов

Рейтинг:
1

________________

Будьте объектно-ориентированными:

public class MyClass
{
	public List<MyClass> MyChildren { get; set; }
	public MyClass MyParent { get; set; }
}


Заполните это виртуальное дерево из БД , чем простая рекурсивная функция может показать его в TreeView:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsTreeView
{

	public partial class Form1 : Form
	{
		MyClass FirstElement;
		public Form1()
		{
			InitializeComponent();
			FirstElement = new MyClass() { Name = "I am first" };


			FirstElement.MyChildren.Add(new MyClass() { Name = "SecondLevel" });
			MyClass oneMoreElement = new MyClass() { Name = "Something" };

			FirstElement.MyChildren[0].MyChildren.Add(oneMoreElement);
			//now we have a tree. this is not simple array.

		}

		private void button1_Click(object sender, EventArgs e)
		{
			GetAllFrom(FirstElement , this.treeView1.Nodes);
		}

		

		private void GetAllFrom(MyClass LevelElement, TreeNodeCollection treeNodeCollection)
		{
			TreeNode anyLevel = new TreeNode();
			anyLevel.Text = LevelElement.Name;
			treeNodeCollection.Add(anyLevel);
			foreach (MyClass anyChild in LevelElement.MyChildren)
			{
				GetAllFrom(anyChild , anyLevel.Nodes);
			}

		}		
	}


	public class MyClass
	{
		List<MyClass> myChildren;
		public List<MyClass> MyChildren
		{
			get
			{
				if (myChildren == null)
				{
					myChildren = new List<MyClass>();
				}
				return myChildren;
			}
			set
			{
				myChildren = value;
			}
		}

		//public MyClass MyParent { get; set; }
		public string Name { get; set; }

		
	}
}


На форме 1 только TreeView и button.


[no name]

Я видел это, когда вы отправили его, но я немного смущен этим. Наверное, мне нужно посмотреть пример. Во всяком случае, то, что я в конечном итоге сделал, это создал класс из моих таблиц базы данных и сохранил заполненный объект в объекте тега TreeView. Затем я создал список<myobj> Для хранения информации базы данных, соответствующей выбранному узлу TreeView.

________________

Я сделал небольшой пример, взгляните. Родитель не используется, как заполнить цепочку - универсального решения нет - все зависит от источника данных.
Wy Winform? WPF mach более мощный, и в нем действительно есть то, что почти нужно - иерархический шаблон данных. но это вряд ли может быть реализовано в Winform...

[no name]

Ладно, я вижу, к чему ты клонишь. Я выбрал WinForms, потому что я разработчик баз данных, и WinForms было легче понять. Я не мог пройти мимо интерфейса XML. Для меня это не имеет смысла. Я уверен, что пойму, как только мне это объяснят, но я учусь сам, так что это мой единственный способ поговорить с кем-либо об этом. ЛОЛ