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
White_Rose viết 19:47 ngày 09/10/2018
Đầu tiên bạn phải thiết kế CSDL để nó có thể lưu dữ liệu ở cấu trúc tree đã rồi mới hiện ra được.
maitrinh viết 19:50 ngày 09/10/2018
mi`nh đã có CSDL rồi, mình tạo trên SQL server 2000. bay gio chỉ cần gọi CSDL ra nữa, nhung gọi theo cách treeview thi mình lại không biết
White_Rose viết 19:54 ngày 09/10/2018
Ý mình nói là bạn phải thiết kế CSDL sao cho nó có thể biểu diễn được ở dạng treeview (tức là từ một node (tương ứng với một record) có thể trỏ đến (hay được trỏ đến) các node con của nó).
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.
maitrinh viết 19:47 ngày 09/10/2018
CSDL của mình tương đối khác so với mọi người. theo thông thường thì se co 2 field la "TenCha" va "TenCon", nhung vì mình thiết kế theo dạng, mình có thêm 1 field "Mức", nếu Mức=0 thì chỉ hiện nút cha, nếu mức không phải bằng không thì lúc đó phân biệt nút con đó của ai phụ thuộc vào IDX của nút cha. Nhưng vì trang của mình tương đối phức tạp, nên việc hiện ra treeview chỉ là 1 trường hợp, phải làm sao để không ảnh hưởng đến các phần gọi dữ liệu khác. Chắc mình diễn tả lung tung bạn không hiểu phải ko? Mình gửi 1 đoạn code của mình và bạn làm ơn chỉ mình thêm treeview vào chỗ mình đáu dấu thì làm thế nào nhé?

<%

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
White_Rose viết 19:54 ngày 09/10/2018
rs.Open ("Select * from INF_MENU where HoatDong=1" oder by UuTien DESC), cnn,2,2
Ý bạn là rs.Open "Select * from INF_MENU where HoatDong=1 oder by UuTien DESC", cnn,2,2???

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. Tiện mình muốn hỏi bạn luôn, cái treeview của bạn theo mục đích sử dụng cần hỗ trợ bao nhiêu cấp? Ở VnExpress hình như là 2 hay 3 cấp gì đó phải không?
Bài liên quan
0