现在的位置: 首页 > 综合 > 正文

asp treeview绑定数据库

2013年05月04日 ⁄ 综合 ⁄ 共 2444字 ⁄ 字号 评论关闭

 

TreeView控件要求绑定到xml数据源上,所以必须设法把数据库中的内存转成xml文件,然后再进行绑定。 
首先,在网页中添加一个XmlDataSource: 
<asp:XmlDataSource ID="XmlDataSource1" runat="server"></asp:XmlDataSource> 
和一个TreeView控件: 
<asp:TreeView ID="TreeView1" runat="server"></asp:TreeView> 

然后在Page_load事件中添加以下代码: 

// 连接数据库 
SqlConnection conn = new SqlConnection("连接字符串"); 
SqlCommand cmd = new SqlCommand("SELECT * FROM 数据表", conn); 
conn.Open(); 
SqlDataReader reader = cmd.ExecuteReader(); 

// 新建XML文档 
XmlDocument doc = new XmlDocument(); 
XmlElement root; 
XmlElement element; 

// 插入xml声明 
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, "yes"); 
doc.InsertBefore(dec, doc.DocumentElement); 

// 用来记录根节点元素 
ArrayList elements = new ArrayList(); 

// 插入第一个节点 
reader.Read(); 
element = doc.CreateElement((string)reader["name"]); 
elements.Add(element); 
doc.InsertAfter(element, dec); 

// 插入后面的子节点 
while (reader.Read()) 
{ 
// 创建子节点 
element = doc.CreateElement((string)reader["name"]); 
elements.Add(element); 

// 找到它的父节点,然后添加到父节点下 
root = (XmlElement)elements[(int)reader["parent"]-1]; 
root.AppendChild(element); 
} 

// 保存xml文件 
FileStream fs = new FileStream(@"D:\Temp\names.xml", FileMode.Create); 
doc.Save(fs); 
fs.Close(); 

// 设置xml数据源控件并把它绑定到TreeView控件上 
XmlDataSource1.DataFile = @"D:\Temp\names.xml"; 
TreeView1.DataSource = XmlDataSource1; 
TreeView1.DataBind(); 

这样TreeView1就绑定了一个从数据库中读出的树结构,并在网页中显示出来。
再说明一下,TreeView是不可能绑定到一个关系数据库表的数据源上的,只能绑定到Xml数据源或SiteMapDataSource。
 
 

TreeView的数据绑定资源默认的有两类:XML和SiteMap 

这两类资源的共同特点就是资源文件是固定保存在项目中的,这一类方便我们使用来做菜单,所以TreeView归类在导航控件中.这里的绑定我不做详细的叙述,VS2005中可以很方便的使用.

TreeView还有一种用法是用来显示数据信息及其数据信息的层级信息,这里上面的两类就不能满足我们的需要,我们需要的是与数据库资源连接,而形成动态的TreeView.同样我们还可以在数据库中使用树的双亲表示法把树描述出来,例如

ID Name ParentID
1 1 0
2 2 0
3 3 0
4 4 1
5 5 1
6 6 2
7 7 2
8 8 3
9 9 7

使用这种的数据库方法可以很方便的绑定到TreeView中,形成一个无限动态树.(当然还有其他的数据库的方法)

private void InitTree(TreeNodeCollection Nds, string ParentId)

    ...{

        DataView dvroles = new DataView();

        TreeNode tmpNd;

        

        string strRID;

        dvroles.Table = csa.CreateDataSet("DS1").Tables["T1"];//DataSet的DataTable表中

        dvroles.RowFilter = " ParentID=" + ParentId;

        foreach (DataRowView drvrole in dvroles)

        ...{

            strRID = drvrole["ID"].ToString();

            tmpNd = new TreeNode();

            tmpNd.Value = drvrole["ID"].ToString();

            tmpNd.Text = drvrole["Name"].ToString();

            tmpNd.Target = drvrole["ParenID"].ToString();

            Nds.Add(tmpNd);

            InitRoleTree(tmpNd.ChildNodes, strRID);

        }

    }

在这里我们可以进行控制的树的信息有

Value 节点的ID
Text 节点的显示信息
Target 关联网页内容的目标窗口,如果没有关联网页,也可以做一个数据容器
ToolTip 节点文本提示工具
ImageUrl 节点图片
ImageToolTip 节点图片文本提示工具

抱歉!评论已关闭.