Click here to Skip to main content
15,885,216 members
Articles / Web Development / ASP.NET
Article

Creation of XML for Microsoft Tree View Control from SQL Server 2000 Database

Rate me:
Please Sign up or sign in to vote.
1.11/5 (14 votes)
13 Jun 20043 min read 89.4K   60   10
Tree is used for hierarchical display of data and permits you to create effective user interfaces while easing development and maintenance time.

Sample Image - SquaredRomiss.jpg

Introduction

Tree is used for hierarchical display of data, and permits you to create effective user interfaces while easing development and maintenance time. You can effectively add any widget to the Tree. The scrollbars appear automatically as needed.

Install Microsoft Web Control

For use with ASP.NET, Microsoft has a small set of tools called Internet Explorer Web Controls, which include the Multiage, Tab Strip, Toolbar, and Tree View controls.

First, you have to go here to get the "iewebcontrols.msi" file. When you install it (by double clicking the downloaded file) on your web server, you get a folder on your default web (webctrl_client) and a set of components (Microsoft.Web.UI.WebControls). One step remains for you to be in business, and that is to add a reference to this excellent suite of controls in your Visual Studio 7.0 project. Just go to Project --> Add Reference, and look for the item called Microsoft IE Web Controls under the .NET tab.

Deployment

First, we need to let our page know about our new control. Put the following lines of code right below the @Page directive of your .aspx page -

ASP.NET
<%@ Import namespace="Microsoft.Web.UI.WebControls" %>
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" 
                              Assembly ="Microsoft.Web.UI.WebControls"%>

To start describing below example – Viewer to run the SQL script in SQL analyzer

In Web.Config file, you have to define your own connection string –

XML
<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>
SQL
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)

How to bind XML file with TreeView Control

XML
<iewc:treeview id="tvwVenire" runat="server" 
                     AutoSelect="True" SelectExpands="True">
    <iewc:TreeNode TreeNodeSrc="xmlfile.xml" 
                          Text="DEMO TREE" Expanded="True"/>
</iewc:treeview>

How it works

Given below procedure picks the data on selected query from SQL Server and generates an XML file for Microsoft Tree Control.

XmlTextWriter promotes the namespace declaration to the root element to avoid having it duplicated on the two child elements.

Moreover, it ensures that the <?xml declaration comes first and that the <!DOCTYPE node comes before the root element. It ensures that value and format of the xml:space attribute is correct and makes sure that its value is acceptable according to the Extensible Markup Language (XML) 1.0 (Second Edition) recommendation. Finally, XmlTextWriter checks when a string is used as a parameter, for example, Null==String.Empty and String.Empty, and whether it follows the W3C rules.

There are three settings you can use to change the way your documents are indented. To start with, we'll use the XmlTextWriter class. This class contains a set of properties called Formatting and Indentation.

Use the Formatting property to set the indentation of the XML document or to determine whether it will be indented. The parser will automatically embed indents into your XML document to make it easier to view in text-oriented viewers.

Methods in the XmlWriter also come in pairs; the WriteStartDocument and WriteEndDocument, WriteStartElement and WriteEndElement, and the WriteStartAttribute and WriteEndAttribute method pairs. Using these methods you can create nested elements or attributes. It is with these method pairs that an XML document is built, and it allows the creation of complex elements or attributes without making errors.

Generate XML File Procedure (xmlfile.cs)

C#
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();
  }
}

Format of XML File (xmlfile.xml)

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>

The Base Control

The control that will be used for this article –

ASP.NET
<%@ 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" %>

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
MCSD.NET + MCAD.NET + MCP + OCA

Comments and Discussions

 
GeneralMy vote of 1 Pin
asdqwewqe12-Jan-10 7:11
asdqwewqe12-Jan-10 7:11 
QuestionIs Text the right attribute? Pin
Lord of Scripts18-Aug-08 23:38
Lord of Scripts18-Aug-08 23:38 
Generalref :asp.net tree view control Pin
x_h1b_y22-Apr-05 4:05
x_h1b_y22-Apr-05 4:05 
hi

i read your article,
but,i have some confusions regarding the if conditions u are using
i am getting data from a join from three diffrent tables.
can you give some pointers on this.

thanks and let me know


GeneralTitle of the article is quite misleading... Pin
devvvy12-Apr-05 23:58
devvvy12-Apr-05 23:58 
GeneralRe: Title of the article is quite misleading... Pin
devvvy13-Apr-05 0:06
devvvy13-Apr-05 0:06 
Generaltree view in custom control Pin
mahila10-Apr-05 18:39
mahila10-Apr-05 18:39 
GeneralFirst Node Is always Selected Pin
tejas_kan24-Nov-04 2:54
tejas_kan24-Nov-04 2:54 
GeneralOne Sugestion Pin
juliaojoa28-Oct-04 6:40
juliaojoa28-Oct-04 6:40 
GeneralHmmm Pin
Dimiter Andonov17-Aug-04 12:07
Dimiter Andonov17-Aug-04 12:07 
GeneralYes but... Pin
theJazzyBrain15-Jun-04 23:46
theJazzyBrain15-Jun-04 23:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.