65.9K
CodeProject 正在变化。 阅读更多。
Home

使用“TreeView”控件绑定数据 Asp.net 2.0

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (31投票s)

2005年7月15日

5分钟阅读

viewsIcon

382932

downloadIcon

2

本文介绍 Asp.net 2.0 TreeView 控件与数据库的集成

作者:             Danish Hameed
日期:                2005年7月15日
电子邮件:            danish.hameed@hotmail.com
职位:         软件工程师

编程语言:Visual Studio 2005 Beta 2, C# (C-Sharp)

作者简介

Danish Hameed 拥有计算机科学学士学位。他参加过编程和软件竞赛并取得了显著成绩。目前在电子学习行业担任软件工程师。

使用“TreeView”控件绑定数据 Asp.net 2.0

 在过去的几周里,我一直在尝试使用 asp.net 2.0 控件。正如大多数 asp.net 2.0 初学者所知,对于 Beta 版本几乎没有可用的工作示例和教程,老实说,我至今没有发现像我预期那样多的开发人员在研究 asp.net 2.0。

真正的事情始于我决定加快速度并开始使用 Microsoft Visual Studio 2005 asp.net 2.0 而不是 VS 的早期版本。在众多新工具中,我在 asp.net 2.0 中发现真正引人入胜的是 TreeView 控件,原因是:我一直在用 JavaScript 创建 TreeViews,并且在将它们与服务器请求/响应集成时遇到了非常困难的时期。

TreeView 控件简介

树视图控件使用线条连接层次结构中的相关项,显示分层列表。每个项都包含一个标签和一个可选的位图。Windows 资源管理器使用树视图控件来显示目录。它显示一个树形结构或菜单,用户可以遍历该结构或菜单以访问网站中的不同页面。包含子节点的节点可以通过单击进行展开或折叠。

您可以使用 ASP.NET 网站导航功能为用户提供一致的网站导航方式。一个简单的解决方案是包含允许用户跳转到其他页面的超链接,以列表或导航菜单的形式呈现这些超链接。但是,随着您的网站的增长,以及您在网站中移动页面,管理所有链接很快变得困难。

为了为您的网站创建一致、易于管理的导航解决方案,您可以使用 ASP.NET 网站导航 TreeView 控件。

图:1.0

注意:您可以通过以下方式手动填充此控件:
1)     单击 TreeView 控件。
2)     右键单击 à 编辑节点
3)     在“节点”标题下有两个按钮,分别用于添加 节点。

现在让我们开始工作!

现在我们对 TreeView 控件有了非常清晰的理解,我们将迅速着手将此控件集成到我们的网站中。

步骤 1

创建两个数据库表 ParentTableChildTable,每个表有两列。

ParentTable   à [ParentName, ParentId (作为主键)]
ChildTable      à [ChildName, ParentId (作为外键)]

注意:您可以使用任何数据库,在我们的示例中,我们将使用 Microsoft SQL Server。

图 2.0

第二步

现在我们已经创建了表格,打开 Microsoft Visual Studio 2005 并创建一个 Asp.net 2.0 WebForm。 

注意:您可以通过点击 文件 菜单,然后点击 新建网站 来完成。
创建新页面时,不要取消选中 将代码放在单独文件中 的复选框。

步骤 3

在程序开头与其他 using 关键字一起添加以下代码行 (LOC)。

 using System.Data.SqlClient;

步骤 4

在您的 WebForm 上放置一个 TreeView 控件。

注意:请勿更改其名称,为简化起见,我们将使用默认名称 TreeView1

现在双击您的页面,指向 Page_Load 事件并写入 fill_Tree();

protected void Page_Load(object sender, EventArgs e)
    {
        fill_Tree();
    }

不用担心,我们将在下一步使用此函数。

步骤 5

现在真正的事情开始了。在这一步中,我们将使用我们的两个表 ParentTableChildTable 来填充我们的 TreeView1 控件。

创建一个函数 fill_Tree()

void fill_Tree()

    {
/*
* 从父表填充 TreeView 控件的根节点
* 并从子表填充子节点
*/ 

/*
* 创建一个 SQL 连接以连接到我们的数据库
*/

SqlConnection SqlCon = new SqlConnection("server=D_hameed;uid=sa;pwd=airforce;database=test");

SqlCon.Open();

/*
* 查询数据库
*/

SqlCommand SqlCmd = new SqlCommand("Select * from ParentTable",SqlCon);

/*
* 定义并填充 SQL DataReader
*/

SqlDataReader Sdr = SqlCmd.ExecuteReader();

/*
* 释放 SQL 命令以释放资源
*/

SqlCmd.Dispose ();

/*
* 初始化字符串 ParentNode。
* 我们将用 ParentTable 记录填充此字符串数组
* 然后我们将使用此字符串数组用父记录填充我们的 TreeView1 控件
*/

string[,] ParentNode = new string[100, 2];

/*
* 从字符串数组索引初始化一个 int 变量
*/

int count = 0;

/*
* 现在使用我们的 SQL Datareader Sdr 填充字符串数组。

* 如果您将此代码粘贴到您的应用程序中,请纠正代码格式。
*/

while (Sdr.Read())
{

ParentNode[count, 0] = Sdr.GetValue(Sdr.GetOrdinal("ParentID")).ToString();
ParentNode[count++, 1] = Sdr.GetValue(Sdr.GetOrdinal("ParentName")).ToString();

}

/*
* 关闭 SQL 数据读取器以释放资源
*/

Sdr.Close();

/*
* 现在,一旦数组填充了 [Parentid,ParentName]
* 开始循环以查找其子模块。
* 我们将使用相同的 [count] 变量来循环 ChildTable
* 以查找与 ParentTable 关联的子级数量。
*/

for (int loop = 0; loop < count; loop++)

{

/*
* 首先使用 ParentName 创建一个 TreeView1 节点,然后
* 将 ChildName 添加到该节点
*/

            TreeNode root = new TreeNode();
            root.Text = ParentNode[loop, 1];
            root.Target = "_blank";

/*
* 给出您的页面 URL
*/

      root.NavigateUrl = "mypage.aspx";

/*
* 现在我们的数组中有了 [ParentId],我们可以找出子模块

* 如果您将此代码粘贴到您的应用程序中,请纠正代码格式。

*/

SqlCommand Module_SqlCmd = new SqlCommand("Select * from ChildTable where ParentId =" + ParentNode[loop, 0], SqlCon);

SqlDataReader Module_Sdr = Module_SqlCmd.ExecuteReader();

            while (Module_Sdr.Read())
            {

// 将子模块添加到根节点

                TreeNode child = new TreeNode();

                child.Text = Module_Sdr.GetValue(Module_Sdr.GetOrdinal("ChildName")).ToString();

                child.Target = "_blank";

                child.NavigateUrl = "your_page_Url.aspx";

                root.ChildNodes.Add(child);

            }

             Module_Sdr.Close();

 // 将根节点添加到 TreeView
           TreeView1.Nodes.Add(root);

        }

/*
* 默认情况下,当您以编程方式填充 TreeView 控件时,它会展开所有节点。
*/
            TreeView1.CollapseAll();
   SqlCon.Close();

    }

 我们来看看效果!

 图 3.0

 

 您可以通过修改 [autoformat][show lines] 属性来增加一些趣味。

 我将非常荣幸收到您的反馈。

 作者:Danish Hameed

© . All rights reserved.