09/10/2018, 17:38
[Q] Hoi ve cach viet TreeView
Mình muốn tạo 1 trang web có treeview giống như VNExpress, mình kết nối tới CSDL là SQL Server 2000, tất cả các nội dung đều gọi từ CSDL lên, vì vậy, mình muốn tạo một treeview với dữ liệu được lấy từ SQL lên. bạn nào biết xin chỉ mình với. thanks

Bài liên quan
MS SQL mình vừa mới học nên không rõ, nhưng nếu để làm như VnExpress thì không cần sử dụng treeview cũng được. Chỉ cần thêm một số field phân loại để lọc ra thôi. Nó vấn là dữ liệu phẳng.
Một tree đơn giản nhưng không hoàn thiện mình đã làm là
http://www.aspvn.net/vbasp/discuss_project.asp?id=12
và đây là mô tả của nó
http://www.aspvn.net/vbasp/vbasp.asp?id=330
Hy vọng được trao đổi thêm với bạn vì mình cũng mới bước vào lĩnh vực này thôi.
<%
Dim rs
'Dim strRs(30)(15)
set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open ("Select * from INF_MENU where HoatDong=1" oder by UuTien DESC), cnn,2,2
%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<META http-equiv="Content-Type" content="text/html;charset=UTF-8">
<SCRIPT LANGUAGE=javascript>
<!--
function openWindow(url,name)
{
popupWin = window.open(url,name,'menubar,resizable,dependent, status,width=640,height=480,left=20,top=20')
}
//-->
</SCRIPT>
</HEAD>
<BODY bgcolor="#184D94">
<P>
<%while not rs.EOF%>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#184D94" width="100%" id="AutoNumber2">
<%if rs("HoatDong") then
if rs("Muc")=0 then
%>
<tr bgcolor="<%=rs("MauNen")%>">
<td width="100%"><p><font face="Arial">
<img src="<%=rs("ICon")%>" width="10" height="10">
<%
select case rs("Thuoctinh")
case 0
Response.Write ("<A Href=javascript:openWindow('" & rs("Link") & "') style='color:"& rs("MauChu") & "'>" & rs("Ten") & "</A>")
'Response.Write ("<br>")
case 1
Response.Write ("<A Href='" & rs("Link") & "' target='Screen6'" & "style='color:"& rs("MauChu") & "'>" & rs("Ten") & "</A>")
'Response.Write ("<br>")
case 2
Response.Write ("<A Href=javascript:openWindow('" & rs("Link") & "') style='color:"& rs("MauChu") & "'>" & rs("Ten") & "</A>")
'Response.Write ("<br>")
case 3
(ở đây mình cần thêm 1 dòng để link theo kiểu fullscreen nhưng mình cũng không biết làm)
case 4
(trường hợp này thì sẽ không làm gì cả, chỉ cần hiện ra các nút con của nó, đây chính là chỗ mình đang bí, muốn gọi được ở đây thì phải phụ thuộc vào "Mức" )
end select %>
</font></td>
</tr>
<%end if
end if
%>
</table>
<% rs.MoveNext
Wend
%>
hy vọng bạn sẽ giúp mình được? nếu có thể nhớ chỉ mình viết thế nào luôn nhé. thanks
Mình vẫn chưa hiểu bạn thiết kế CSDL như nào. Có phải mỗi record:
- có một field ID là primary key của record đó.
- có một field IDX tham chiếu tới node cha của nó.
- field "Mức" của bạn mang ý nghĩa như nào vậy? Nếu "Mức" = 0 thỉ hiện node đó vậy nếu "Mức" khác 0 thì hiển thị cái gì? Ý bạn có phải muốn đầu tiên nó hiện tòan bộ các node cha. Sau đấy nếu click vào một node cha nào thì nó sẽ hiển thị toàn bộ các node cha cùng các node con của node vừa bị click. Nếu các node con vừa rồi lại bị click thì sẽ hiện các node con của nó (node con cấp 2)???
Đoạn source của bạn chỉ đơn thuần là lấy ra các record có field "HoatDong" với giá trị 1 (với truy vấn đầy thì câu lệnh If rs("HoatDong") then... không cần thiết). Sau đó nó hiển thị các node có "Muc" với giá trị 0 -> không nói lên được cấu trúc mà bạn sử dụng.
Nếu bạn có cấu trúc cụ thể của table cùng với ý nghĩa từng field (chỉ các field liên quan đến việc định dạng tree) và nói rõ hơn ý định của bạn thì có lẽ sẽ dễ bàn hơn