|
|
|
ASP 4.0 อยากได้โค๊ตสร้าง treeview แบบดึงจากฐานข้อมูลครับมีทานใหนพอแนะนำบ้างครับ |
|
|
|
|
|
|
|
แนะนำให้ 1 table ต่อ หนึ่ง node ครับ คือ ถ้าเป็น node ใหญ่สุด ก็ให้เก็บลงใน table นึงเลยครับ
และถ้าเป็น node ลูกก็ให้เก็บอีก table นึงและก็มี key ที่จะ join หากันเจอในแต่ละ table ที่เก็บ node
ถ้าคุณทำแบบนี้เวลาต้องการเพิ่ม node เข้าไปมันจะมีปัญหาที่ code ด้วยครับ เพราะคุณต้องการ
แก้ไข code แล้วอาจทำให้ข้อมูลที่แสดงในแต่ละ node ไม่ถูกด้วยครับ
example TreeView
|
|
|
|
|
Date :
2012-10-02 11:45:59 |
By :
kanchen |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แนะนำให้ทำแบบเดิมดีแล้วครับ
ในกรณีที่ tree ไม่ได้มี level แน่นอน (อาจจะลึกลงไปเป็นสิบๆ level)
ถ้าพอเป็น recursive ก็เขียน recursive วนลูปเอา
|
|
|
|
|
Date :
2012-10-02 12:51:26 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอจะมีตัวอย่าง ใหม ครับ ตอนนี้ผมมืดไปหมด ติดมา หลายวันแล้วอะครับ
|
|
|
|
|
Date :
2012-10-02 13:47:30 |
By :
aa-y-za |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
treeview.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="treeview.aspx.cs" Inherits="treeview" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div style="float: left;">
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</div>
<div style="float: left;">
<asp:TreeView ID="TreeView1" runat="server">
</asp:TreeView>
</div>
</div>
</form>
</body>
</html>
treeview.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class treeview : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable DtData = CreateData();
GridView1.DataSource = DtData;
GridView1.DataBind();
BindTreeView(TreeView1.Nodes, DtData, 0);
}
private void BindTreeView(TreeNodeCollection NodeCollection, DataTable DtData, int Level)
{
IEnumerable<DataRow> nodes = from d in DtData.AsEnumerable()
where d.Field<int>("ParentID") == Level
select d;
foreach (DataRow Dr in nodes)
{
TreeNode node = new TreeNode(Dr.Field<string>("Name"));
NodeCollection.Add(node);
BindTreeView(node.ChildNodes, DtData, Dr.Field<int>("ID"));
}
}
protected DataTable CreateData()
{
DataTable DtData = new DataTable();
DtData.Columns.Add(new DataColumn("ID", typeof(int)));
DtData.Columns.Add(new DataColumn("Name", typeof(string)));
DtData.Columns.Add(new DataColumn("ParentID", typeof(int)));
int id = 1;
for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= i; j++)
{
DataRow DrNew = DtData.NewRow();
DrNew["ID"] = id;
DrNew["Name"] = string.Format("ThaiCreate_{0}{1}", i.ToString(), j.ToString());
DrNew["ParentID"] = (i + j - 3 < 0) ? 0 : i + j - 3;
DtData.Rows.Add(DrNew);
id++;
}
}
return DtData;
}
}
|
|
|
|
|
Date :
2012-10-03 08:39:06 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
งงแบบนี้ไปต่อไม่ถูกเลย สงสัยก็อปโค้ดไปใช้เลยโดยไม่รู้ว่าใช้ยังไง -_-"
แนะให้ว่า เอาแค่ต้องส่วนที่เป็น recursive ไปใช้ก็พอจ้า
|
|
|
|
|
Date :
2012-10-03 12:50:23 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ดีใจด้วยครับ
|
|
|
|
|
Date :
2012-10-03 13:42:10 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|