使用 SQL Server 2000 数据库创建 Microsoft Tree View 控件的 XML






1.11/5 (11投票s)
2004 年 6 月 14 日
3分钟阅读

90619
树用于分层显示数据,并允许您创建有效的用户界面,同时减少开发和维护时间。
引言
树用于分层显示数据,并允许您创建有效的用户界面,同时减少开发和维护时间。您可以有效地将任何小部件添加到树中。滚动条会根据需要自动显示。
安装 Microsoft Web 控件
为了与 ASP.NET 结合使用,Microsoft 提供了一小组工具,称为 Internet Explorer Web 控件,其中包括 Multiage、选项卡式选项卡、工具栏和树视图控件。
首先,您必须点击这里获取“iewebcontrols.msi”文件。 当您在 Web 服务器上安装它(通过双击下载的文件)时,您将在默认 Web (webctrl_client) 上获得一个文件夹和一组组件 (Microsoft.Web.UI.WebControls
)。 您还需要完成一步才能开始使用,即将对 Visual Studio 7.0 项目中的这个优秀控件套件添加引用。 只需转到“项目”-->“添加引用”,然后在“.NET”选项卡下查找名为“Microsoft IE Web 控件”的项目。
部署
首先,我们需要让我们的页面知道我们的新控件。 将以下代码行放在 .aspx 页面的 @Page
指令正下方 -
<%@ Import namespace="Microsoft.Web.UI.WebControls" %>
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls"
Assembly ="Microsoft.Web.UI.WebControls"%>
要开始描述下面的示例 - 在 SQL 分析器中运行 SQL 脚本的查看器
在 Web.Config 文件中,您必须定义您自己的连接字符串 -
<appSettings>
<add key="strConn"
value="workstation id='demo';packet size=4096;
integrated security=SSPI;data source='demo\demo';
persist security info=True;initial catalog=demo">
</add>
</appSettings>
CREATE TABLE [XMLData] (
[FuncId] [int] NOT NULL ,
[FuncName] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[FuncLId] [int] NULL ,
[FuncLevName] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FuncLId1] [int] NULL ,
[FuncLev1Name] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FuncLId2] [int] NULL ,
[FuncLev2Name] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FuncLId3] [int] NULL ,
[FuncLev3Name] [nvarchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
INSERT INTO XMLData (FuncId, FuncName, FuncLId, FuncLevName,
FuncLId1, FuncLev1Name, FuncLId2, FuncLev2Name,
FuncLId3, FuncLev3Name) VALUES(1, 'Production', 1,
Solution Architect, 1, Project Manager, 1,
Project Leader, 1, Programmer)
INSERT INTO XMLData (FuncId, FuncName, FuncLId,
FuncLevName, FuncLId1, FuncLev1Name, FuncLId2,
FuncLev2Name, FuncLId3, FuncLev3Name) VALUES
(1, Production, 1, Solution Architect, 1,
Project Manager, 1, Project Leader, 2, Designer)
INSERT INTO XMLData (FuncId, FuncName, FuncLId, FuncLevName,
FuncLId1, FuncLev1Name, FuncLId2, FuncLev2Name,
FuncLId3, FuncLev3Name) VALUES (2, Marketing & Sales, 2,
Business Development Manager, 2, Area Manager, 2,
Area Sales Manager, 3, Sales Man)
INSERT INTO XMLData (FuncId, FuncName, FuncLId, FuncLevName,
FuncLId1, FuncLev1Name, FuncLId2, FuncLev2Name,
FuncLId3, FuncLev3Name) VALUES (2, Marketing & Sales, 2,
Business Development Manager, 2, Area Manager, 2,
Area Sales Manager, 4, Sales Women)
如何将 XML 文件与 TreeView 控件绑定
<iewc:treeview id="tvwVenire" runat="server"
AutoSelect="True" SelectExpands="True">
<iewc:TreeNode TreeNodeSrc="xmlfile.xml"
Text="DEMO TREE" Expanded="True"/>
</iewc:treeview>
工作原理
下面给出的过程从 SQL Server 中选取所选查询上的数据,并为 Microsoft 树控件生成 XML 文件。
XmlTextWriter
将命名空间声明提升到根元素,以避免在两个子元素上重复它。
此外,它确保 <?xml
声明首先出现,并且 <!DOCTYPE
节点在根元素之前出现。 它确保 xml:space
属性的值和格式正确,并确保其值根据可扩展标记语言 (XML) 1.0(第二版)建议是可以接受的。 最后,XmlTextWriter
检查何时将字符串用作参数,例如,Null==String.Empty
和 String.Empty
,以及它是否遵循 W3C 规则。
您可以使用三个设置来更改文档的缩进方式。 首先,我们将使用 XmlTextWriter
类。 此类包含一组称为 Formatting
和 Indentation
的属性。
使用 Formatting
属性来设置 XML 文档的缩进或确定它是否将被缩进。 分析器会自动将缩进嵌入到您的 XML 文档中,使其更易于在面向文本的查看器中查看。
XmlWriter
中的方法也成对出现; WriteStartDocument
和 WriteEndDocument
、WriteStartElement
和 WriteEndElement
以及 WriteStartAttribute
和 WriteEndAttribute
方法对。 使用这些方法,您可以创建嵌套元素或属性。 XML 文档就是通过这些方法对构建的,并且它允许创建复杂的元素或属性而不会出错。
生成 XML 文件过程 (xmlfile.cs)
public class GenXML : System.Web.UI.Page
{
private void btnSubmit_Click(object sender, System.EventArgs e)
{
string strConn =
System.Configuration.ConfigurationSettings.AppSettings ["strConn"];
SqlConnection sqlconn = new SqlConnection(strConn);
SqlCommand sqlcomm = new SqlCommand("SELECT * FROM XMLData",sqlconn);
SqlDataReader dr;
sqlconn.Open();
//Read data into DataReader as dr
dr=sqlcomm.ExecuteReader();
string xmlDoc= Server.MapPath("..\\xmlfile.xml");
XmlTextWriter writer = null;
//Create instance of XmlTextWriter as a tool
//for writing our XML information
writer = new XmlTextWriter(xmlDoc,Encoding.UTF8);
// Indent the XML file to look nice
writer.Formatting = Formatting.Indented;
// Write the beginning header of our XML file along with a TREENODES tag
writer.WriteStartDocument(true);
writer.WriteStartElement("TREENODES");
string lv,lv1,lv2,lv3,lv4;
int flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
dr.Read();
lv=dr["FuncId"].ToString();
lv1=dr["FuncLId"].ToString();
lv2=dr["FuncLId1"].ToString();
lv3=dr["FuncLId2"].ToString();
lv4=dr["FuncLId3"].ToString();
do
{
if (lv4!=dr["FuncLId3"].ToString() && lv4.Length!=0)
{
// write end TREE attributes
writer.WriteEndElement();
}
if (lv3!=dr["FuncLId2"].ToString() && lv3.Length!=0)
{
writer.WriteEndElement();
}
if (lv2!=dr["FuncLId1"].ToString() && lv2.Length!=0)
{
writer.WriteEndElement();
}
if (lv1!=dr["FuncLId"].ToString() && lv1.Length!=0)
{
writer.WriteEndElement();
}
if (lv!=dr["FuncId"].ToString() && lv.Length!=0)
{
writer.WriteEndElement();
}
for (int i=1; i<6; i++)
{
if (i==1 && lv1!=null)
{
if (lv!=dr["FuncId"].ToString())
{
lv=dr["FuncId"].ToString();
flag1=0;
}
if(flag1==0 && lv==dr["FuncId"].ToString() && lv.Length!=0)
{
// write TREE attributes TAG names
writer.WriteStartElement("TreeNode");
writer.WriteAttributeString ("Text",dr["FuncName"].ToString());
flag1=1;
}
}
else
{
if(i==2 && lv1!=null)
{
if (lv1!=dr["FuncLId"].ToString())
{
lv1=dr["FuncLId"].ToString();
flag2=0;
}
if(flag2==0 && lv1==dr["FuncLId"].ToString() && lv1.Length!=0)
{
writer.WriteStartElement("TreeNode");
writer.WriteAttributeString ("Text",
dr["FuncLevName"].ToString());
flag2=1;
}
}
else
{
if(i==3 && lv2!=null)
{
if (lv2!=dr["FuncLId1"].ToString())
{
lv2=dr["FuncLId1"].ToString();
flag3=0;
}
if(flag3==0 && lv2==dr["FuncLId1"].ToString() && lv2.Length!=0)
{
writer.WriteStartElement("TreeNode");
writer.WriteAttributeString ("Text",
dr["FuncLev1Name"].ToString());
flag3=1;
}
}
else
{
if(i==4 && lv3!=null)
{
if (lv3!=dr["FuncLId2"].ToString())
{
lv3=dr["FuncLId2"].ToString();
flag4=0;
}
if(flag4==0 && lv3==dr["FuncLId2"].ToString() && lv3.Length!=0)
{
writer.WriteStartElement("TreeNode");
writer.WriteAttributeString ("Text",
dr["FuncLev2Name"].ToString());
flag4=1;
}
}
else
{
if(i==5 && lv4!=null)
{
if (lv4!=dr["FuncLId3"].ToString())
{
lv4=dr["FuncLId3"].ToString();
flag5=0;
}
if(flag5==0 &&
lv4==dr["FuncLId3"].ToString()
&& lv4.Length!=0)
{
writer.WriteStartElement("TreeNode");
writer.WriteAttributeString ("Text",
dr["FuncLev3Name"].ToString());
flag5=1;
}
}
}
}
}
}
}
}while (dr.Read());
writer.WriteEndDocument();
writer.Flush();
writer.Close();
dr.Close();
}
}
XML 文件格式 (xmlfile.xml)
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<TREENODES>
<TreeNode Text="Production">
<TreeNode Text="Solution Architect">
<TreeNode Text="Project Manager">
<TreeNode Text="Project Leader">
<TreeNode Text="Programmer"/>
<TreeNode Text="Designer"/>
</TreeNode>
</TreeNode>
</TreeNode>
</TreeNode>
<TreeNode Text="Marketing & Sales">
<TreeNode Text="Business Development Manager">
<TreeNode Text="Area Manager">
<TreeNode Text="Area Sales Manager">
<TreeNode Text="Sales Man"/>
<TreeNode Text="Sales Women"/>
</TreeNode>
</TreeNode>
</TreeNode>
</TreeNode>
</TREENODES>
基本控件
本文将使用的控件 –
<%@ import namespace="Microsoft.Web.UI.WebControls" %>
<%@ import Namespace="System.Web.UI.WebControls.WebControl" %>
<%@ import Namespace="System.Data.SqlClient" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.XML" %>
<%@ import Namespace="System.Text" %>