PDA

View Full Version : سوال: نمایش اطلاعات سلسله مراتبی در TreeView



FirstLine
شنبه 19 اردیبهشت 1388, 13:05 عصر
با سلام
چجوری میتونم یک جدول که بصورت سلسله مراتبی است را در یک TreeView نمایش دهم؟
آیا بهتره که محتویات کوئری را به xml تبدیل کنم و tree را به xml مرتبط کنم و یا اینکه راهی هست که مستقیم بشه TreeView را به DataSet مرتبط کرد. البته با RadTreeView تلریک هم نتونستم این کار را انجام بدهم.
لطفا راهنمایی بفرمایید.
با تشکر

goldax
شنبه 19 اردیبهشت 1388, 13:30 عصر
با کد زیر می تونی تا 6 سطح از treeview رو پر کنی
کد زیر رو در یه صفحه past کن
خودش کنترل های لازم رو اضاف می کنه
فقی کافیه دستور اس کیو ال رو تصحیح کن


_____________

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Debug="true" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="به سایت گروه شبکه و صنعت کیان خوش آمدید" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Menu ID="Menu1" runat="server" Font-Bold="True" Font-Names="Tahoma" Font-Size="10pt"
ForeColor="Black" Orientation="Horizontal" StaticTopSeparatorImageUrl="~/pic/seprator2.gif">
<Items>
<asp:MenuItem Text="صفحه اصلی" Value="صفحه اصلی" Enabled="False" ToolTip="صفحه اصلی"></asp:MenuItem>
</Items>
<StaticSelectedStyle BackColor="#C0C0FF" />
</asp:Menu>
</asp:Content>
<asp:Content ID="Content2" runat="server" ContentPlaceHolderID="ContentPlaceHolder2">
<table>
<tr>
<td align="center" style="width: 300px; height: 20px; background-color: transparent"
valign="top">
</td>
<td align="right" dir="rtl" style="width: 300px; height:20px; background-color: transparent; margin-bottom: 1px; border-bottom-color: #006699; border-bottom-style: ridge;"
valign="top">
<asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Names="Tahoma" Font-Size="10pt"
Text="محصولات"></asp:Label></td>
</tr>
<tr>
<td style="width: 300px; height:400px; background-color: gainsboro;" valign="top" dir="rtl" align="right">
<asp:TreeView id="TreeView1"
Font-Name= "Arial"
ForeColor="Blue"
OnTreeNodePopulate="PopulateNode"
runat="server" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged1" Font-Names="Tahoma" Font-Size="7pt" ImageSet="Simple" NodeIndent="10" ShowLines="True" >
<Nodes>
<asp:TreeNode Text='محصولات'
SelectAction="Expand"
PopulateOnDemand="True" Value="محصولات"/>
</Nodes>
<ParentNodeStyle Font-Bold="False" />
<HoverNodeStyle Font-Underline="True" ForeColor="#DD5555" />
<SelectedNodeStyle Font-Underline="True" ForeColor="#DD5555" HorizontalPadding="0px"
VerticalPadding="0px" />
<NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" HorizontalPadding="0px"
NodeSpacing="0px" VerticalPadding="0px" />
</asp:TreeView>
<asp:Label id="Message" runat="server"/>
</td>
</tr>
</table>
</asp:Content>

<script runat="server">

void PopulateNode(Object sender, TreeNodeEventArgs e)
{

// Call the appropriate method to populate a node at a particular level.
switch(e.Node.Depth)
{

case 0:
e.Node.ExpandAll();
//e.Node.PopulateOnDemand = true;
level0(e.Node);
break;

case 1:
e.Node.ExpandAll();
// e.Node.PopulateOnDemand = true;
level1(e.Node);
break;
case 2:
e.Node.ExpandAll();
//e.Node.PopulateOnDemand = true;
level2(e.Node);
break;
case 3:
e.Node.ExpandAll();
//e.Node.PopulateOnDemand = true;
level3(e.Node);
break;
case 4:
e.Node.CollapseAll();
e.Node.PopulateOnDemand = true;
level4(e.Node);
break;
case 5:
e.Node.CollapseAll();
e.Node.PopulateOnDemand = true;
level5(e.Node);
break;
default:
break;
}

}

void level0(TreeNode node)
{
DataSet ResultSet = RunQuery("Select nname,id from product where level1=0 and father=-1");
if(ResultSet.Tables.Count > 0)
{
foreach (DataRow row in ResultSet.Tables[0].Rows)
{
TreeNode newNode = new TreeNode();
newNode.Text = row["nname"].ToString();
newNode.Value = row["id"].ToString();
newNode.PopulateOnDemand = true;
newNode.SelectAction = TreeNodeSelectAction.SelectExpand;
node.ChildNodes.Add(newNode);
}
}
}
void level1(TreeNode node)
{
DataSet ResultSet = RunQuery("Select nname,id from product where level1=1 and father=" + node.Value);;
if(ResultSet.Tables.Count > 0)
{
foreach (DataRow row in ResultSet.Tables[0].Rows)
{
TreeNode NewNode = new TreeNode();
NewNode.Text = row["nname"].ToString();
NewNode.Value = row["id"].ToString();
NewNode.PopulateOnDemand = true;
NewNode.SelectAction = TreeNodeSelectAction.SelectExpand;
node.ChildNodes.Add(NewNode);
}
}
}

void level2(TreeNode node)
{
DataSet ResultSet = RunQuery("Select nname,id from product where level1=2 and father=" + node.Value); ;
if (ResultSet.Tables.Count > 0)
{
foreach (DataRow row in ResultSet.Tables[0].Rows)
{
TreeNode NewNode = new TreeNode();
NewNode.Text = row["nname"].ToString();
NewNode.Value = row["id"].ToString();
NewNode.PopulateOnDemand = true;
NewNode.SelectAction = TreeNodeSelectAction.SelectExpand;
node.ChildNodes.Add(NewNode);
}
}
}

void level3(TreeNode node)
{
DataSet ResultSet = RunQuery("Select nname,id from product where level1=3 and father=" + node.Value); ;
if (ResultSet.Tables.Count > 0)
{
foreach (DataRow row in ResultSet.Tables[0].Rows)
{
TreeNode NewNode = new TreeNode();
NewNode.Text = row["nname"].ToString();
NewNode.Value = row["id"].ToString();
NewNode.PopulateOnDemand = true;
NewNode.SelectAction = TreeNodeSelectAction.SelectExpand;
node.ChildNodes.Add(NewNode);
}
}
}
void level4(TreeNode node)
{
DataSet ResultSet = RunQuery("Select nname,id from product where level1=4 and father=" + node.Value); ;
if (ResultSet.Tables.Count > 0)
{
foreach (DataRow row in ResultSet.Tables[0].Rows)
{
TreeNode NewNode = new TreeNode();
NewNode.Text = row["nname"].ToString();
NewNode.Value = row["id"].ToString();
NewNode.PopulateOnDemand = true;
NewNode.SelectAction = TreeNodeSelectAction.SelectExpand;
node.ChildNodes.Add(NewNode);
}
}
}
void level5(TreeNode node)
{
DataSet ResultSet = RunQuery("Select nname,id from product where level1=5 and father=" + node.Value);
if (ResultSet.Tables.Count > 0)
{
foreach (DataRow row in ResultSet.Tables[0].Rows)
{
TreeNode NewNode = new TreeNode();
NewNode.Text = row["nname"].ToString();
NewNode.Value = row["id"].ToString();
NewNode.PopulateOnDemand = true;
NewNode.SelectAction = TreeNodeSelectAction.SelectExpand;
node.ChildNodes.Add(NewNode);
}
}
}

DataSet RunQuery(String QueryString)
{
//String ConnectionString = "Data Source=.;Initial Catalog=kian;Integrated Security=True";
string connect = ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection DBConnection = new SqlConnection(connect);
SqlDataAdapter DBAdapter;
DataSet ResultsDataSet = new DataSet();
try
{
DBAdapter = new SqlDataAdapter(QueryString, DBConnection);
DBAdapter.Fill(ResultsDataSet);
DBConnection.Close();
}
catch(Exception ex)
{
if(DBConnection.State == ConnectionState.Open)
{
DBConnection.Close();
}
Message.Text = "Unable to connect to the database.";
}
return ResultsDataSet;
}

</script>

goldax
شنبه 19 اردیبهشت 1388, 13:35 عصر
راستی یادم رفت بگم،تمام کد ها رو باید در یک صفحه aspx و به همین ترتیب paste کنی
این میاد از دستور switch استفاده می کنه
هر سطحی که بخوای برای treeview اضافه کنی ، باید یه دونه case هم اضافه کنی
من توی بانک اطلاعاتی برای نشان دادن child و parent از اعداد 1 , -1 استفاده کردم.

موفق باشی

FirstLine
پنج شنبه 24 اردیبهشت 1388, 12:11 عصر
با سلام
از لطف و راهنمایی شما سپاسگزارم
راهکارش بهمراه مثال و توضیحات کامل در آدرس زیر پیدا شد.
http://aspalliance.com/732
با تشکر