今天收获不错,还搞定了显示treeview控件的问题,连接到数据库取出数据显示成树。参考了网上一位兄弟的代码,不过他用了一套别的树组件,当时没反应过来,找我奇怪了,怎么找不到他代码中的对象,让我真想背一下.ent的命名空间。
在他的代码有,有两种方式实现树,一种是使用递归,据说是效率低一些。另一种是使用堆栈,说效率高,所以呢我就选择堆栈来测试了,有兴趣的朋友可以试一下递归。比较一下,有什么消息么反馈啊。
以下的用堆栈显示树的代码,对堆栈不是太了解,不知道它是谁调谁怎么弄出棵树了,知道的朋友告诉我一声呵。
//Example_AdoNetShowTreeview.aspx文件
//-----------------------------------------------------------------------------------------------------
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:TreeView ID ="TreeView1" runat ="server" ShowLines ="True" >
</ asp:TreeView >
< asp:Button ID ="ButShowTree" runat ="server" OnClick ="ButShowTree_Click" Text ="显示树" />
</ div >
</ form >
</ body >
</ html >
//Example_AdoNetShowTreeview.aspx.cs文件
//-----------------------------------------------------------------------------------------------------
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Example_Example_AdoNetShowTreeview : System.Web.UI.Page
... {
//创建数据库连接对象
public SqlConnection objMyconn = new SqlConnection();
protected void Page_Load(object sender, EventArgs e)
...{
//设置连接字符串
objMyconn.ConnectionString = "Pooling=true;Password=;Persist Security Info=True;User ID=sa;Initial Catalog=DotNetExampleDB;Data Source=ZMJINNB";
//打开数据库
objMyconn.Open();
}
protected void ButShowTree_Click(object sender, EventArgs e)
...{
//------------------------------------------------------------------------
//创建DataSet
DataSet objMyds = new DataSet();
//创建数据代理DataAdapter
SqlDataAdapter objMyadp = new SqlDataAdapter("Select FID,FNAME,FPARENT_ID from Event_Type", objMyconn);
//使用数据代码对象将数据填充到数据集对象中,并指定表的名名为:Event_Info
objMyadp.Fill(objMyds, "Event_Info");
DataTable dt = objMyds.Tables[0];
//树的根节点值
string strTreeRootValue = "-1";
if (dt == null)
return;
//定义一个根节点
TreeNode pnode;
//定义一个栈
Stack plist = new Stack();
//------------------------------------------------------------------------
//树的根节点代码
DataRow[] pdrs = dt.Select("FPARENT_ID='" + strTreeRootValue + "'");
if (pdrs != null)
...{
foreach (DataRow dr in pdrs)
...{
pnode = new TreeNode();
pnode.Value = dr["FID"].ToString();
pnode.Text = dr["FNAME"].ToString();
TreeView1.Nodes.Add(pnode);
plist.Push(pnode);
}
}
//------------------------------------------------------------------------
//树的子节点代码
while (true)
...{
if (plist.Count == 0) break;
pnode = (TreeNode)(plist.Pop());
DataRow[] drs = dt.Select("FPARENT_ID='" + pnode.Value + "'");
if (drs != null)
...{
foreach (DataRow dr in drs)
...{
TreeNode node = new TreeNode(dr["FNAME"].ToString(), dr["FID"].ToString());
pnode.ChildNodes.Add(node);
plist.Push(node);
}
}
}
}
}
//创建数据表代码(测试数据就自己搞定吧,呵呵)
//-----------------------------------------------------------------------------------------------------
drop table [ dbo ] . [ Event_Type ]
GO
CREATE TABLE [ dbo ] . [ Event_Type ] (
[ FID ] [ varchar ] ( 32 ) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[ FCODE ] [ varchar ] ( 32 ) COLLATE Chinese_PRC_CI_AS NULL ,
[ FNAME ] [ varchar ] ( 64 ) COLLATE Chinese_PRC_CI_AS NULL ,
[ FUSE_ID ] [ varchar ] ( 32 ) COLLATE Chinese_PRC_CI_AS NULL ,
[ FPARENT_ID ] [ varchar ] ( 32 ) COLLATE Chinese_PRC_CI_AS NULL ,
[ FOrderID ] [ float ] NULL ,
[ FREMARK ] [ varchar ] ( 256 ) COLLATE Chinese_PRC_CI_AS NULL
) ON [ PRIMARY ]
GO