اتصال و نمایش داده های سلسله مراتبی با کنترل TreeView در Asp.NET با استفاده از #C و VB.NET

دوشنبه 18 اسفند 1393

در این مقاله نحوه اتصال و نمایش داده های سلسله مراتبی با استفاده از کنترل TreeView در Asp.NET با کمک دستور #C و VB.NET شرح داده میشود .

اتصال و نمایش داده های سلسله مراتبی با کنترل TreeView در Asp.NET  با استفاده از #C و VB.NET

برای نمایش رابطه در TreeView ما دو جدول با نامهای VehicleTypes و VehicleSubTypes در بانک اطلاعاتی میسازیم .

نمای ظاهر و اطلاعات مربوط به جداول به شرح زیر می باشد :

جدول VehicleTypes

جدول VehicleSub Types

تگ HTML مربوط به کنترل TreeView شامل زیر میباشد :


<h3>
    Vehicle Details</h3>
<hr />
<asp:TreeView ID="TreeView1" runat="server" ImageSet="XPFileExplorer" NodeIndent="15">
    <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
    <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px"
        NodeSpacing="0px" VerticalPadding="2px"></NodeStyle>
    <ParentNodeStyle Font-Bold="False" />
    <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"
        VerticalPadding="0px" />
</asp:TreeView>

همچنین ما باید فضای نامهای زیر را به پروژه اضافه کنیم :

کد #C :


using System.Data;
using System.Data.SqlClient;
using System.Configuration;

کد VB.NET :


Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

روش Populated TreeViewیک تابع بازگشتی است . داخل رویداد Load مربوط به صفحه کنترل TreeView اطلاعات جدول VehicleTypes را نمایش می دهد , داخل متد TreeView یک حلقه برای Data Table اجرا میشود که اگر ID والد برار با صفر یاشد زیر شاخه مربوط به آن فیلد نمایش داده نمیشود .Query مورد نظر برای جدول VehicleSubTypes اجرا میشود و اطلاعات مربوط به هر Node در زیر همان Node نمایش داده میشود. این روند تا زمانی که همه ID های مربوط به جدول والد و اطلاعات مربوط به جدول فرزند فراخوانی بشوند ادامه پیدا می کند .

کد #C :


protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dt = this.GetData("SELECT Id, Name FROM VehicleTypes");
        this.PopulateTreeView(dt, 0, null);
    }
}
 
private void PopulateTreeView(DataTable dtParent, int parentId, TreeNode treeNode)
{
    foreach (DataRow row in dtParent.Rows)
    {
        TreeNode child = new TreeNode
        {
            Text = row["Name"].ToString(),
            Value = row["Id"].ToString()
        };
        if (parentId == 0)
        {
            TreeView1.Nodes.Add(child);
            DataTable dtChild = this.GetData("SELECT Id, Name FROM VehicleSubTypes WHERE VehicleTypeId = " + child.Value);
            PopulateTreeView(dtChild, int.Parse(child.Value), child);
        }
        else
        {
            treeNode.ChildNodes.Add(child);
        }
    }
}
 
private DataTable GetData(string query)
{
    DataTable dt = new DataTable();
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand(query))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                sda.Fill(dt);
            }
        }
        return dt;
    }
}

کد مربوط به VB.NET :


Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim dt As DataTable = Me.GetData("SELECT Id, Name FROM VehicleTypes")
        Me.PopulateTreeView(dt, 0, Nothing)
    End If
End Sub
 
Private Sub PopulateTreeView(dtParent As DataTable, parentId As Integer, treeNode As TreeNode)
    For Each row As DataRow In dtParent.Rows
        Dim child As New TreeNode() With { _
         .Text = row("Name").ToString(), _
         .Value = row("Id").ToString() _
        }
        If parentId = 0 Then
            TreeView1.Nodes.Add(child)
            Dim dtChild As DataTable = Me.GetData("SELECT Id, Name FROM VehicleSubTypes WHERE VehicleTypeId = " + child.Value)
            PopulateTreeView(dtChild, Integer.Parse(child.Value), child)
        Else
            treeNode.ChildNodes.Add(child)
        End If
    Next
End Sub
 
Private Function GetData(query As String) As DataTable
    Dim dt As New DataTable()
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand(query)
            Using sda As New SqlDataAdapter()
                cmd.CommandType = CommandType.Text
                cmd.Connection = con
                sda.SelectCommand = cmd
                sda.Fill(dt)
            End Using
        End Using
        Return dt
    End Using
End Function

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید