|
Тема |
Re: TreeView [re: AiSiktiriks] |
|
Автор | Гypy (Нерегистриран) | |
Публикувано | 31.10.04 12:32 |
|
|
При 30,000 нода както и да ги мислиш най-добрия вариант е да прихванеш expand event-a на нода и да заредиш неговите child nodes в ивент хендлъра. Тоест почваш само с руут нодес, и при всеки клик на "+" зареждаш децата.
Иначе наведнъж най-бързият начин е с ДатаСет и релации вътре в него - става само с едно куери.
private void GenerateTreeView()
{
OleDbConnection dbCon = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Examples/Programming/SqlBinding/tree.mdb"));
dbCon.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM Links", dbCon);
DataSet ds = new DataSet();
adapter.Fill(ds);
ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["id"], ds.Tables[0].Columns["parentId"]);
foreach(DataRow dbRow in ds.Tables[0].Rows)
{
if(dbRow.IsNull("parentId"))
{
RadTreeNode node = CreateNode(dbRow["Text"].ToString(), true);
RadTree1.AddNode(node);
RecursivelyPopulate(dbRow, node);
}
}
}
private void RecursivelyPopulate(DataRow dbRow, RadTreeNode node)
{
foreach (DataRow childRow in dbRow.GetChildRows("NodeRelation"))
{
RadTreeNode childNode = CreateNode(childRow["Text"].ToString(), true);
node.AddNode(childNode);
RecursivelyPopulate(childRow, childNode);
}
}
private RadTreeNode CreateNode(string text, bool expanded)
{
RadTreeNode node = new RadTreeNode(text);
node.Expanded = true;
return node;
}
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
GenerateTreeView();
}
}
|
| |
|
|
|