Introduction
In this post, I explain How to Populate Treeview Nodes Dynamically (On Demand) using Ajax in ASP.NETMy previous releted post was : How to Bind Treeview from database using recursion function in asp.net c#.
Steps :
Step - 1 : Create New Project.
Go to File > New > Project > Select asp.net web forms application > Entry Application Name > Click OK.Step-2: Add a Database.
Go to Solution Explorer > Right Click on App_Data folder > Add > New item > Select SQL Server Database Under Data > Enter Database name > Add.Step-3: Create table for fetch data for show in treeview.
Open Database > Right Click on Table > Add New Table > Add Columns > Save > Enter table name > Ok.In this example, I have used two tables as below
Step-4: Add Entity Data Model.
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select ADO.net Entity Data Model under data > Enter model name > Add.A popup window will come (Entity Data Model Wizard) > Select Generate from database > Next >
Chose your data connection > select your database > next > Select tables > enter Model Namespace > Finish.
Step-5: Add a Animated image for show in Loding panel.
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > Existing item > Browse & Select File > Add.Step-6: Add a Webpage and Design for Show Data in Treeview
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select web form/ web form using master page under Web > Enter page name > Add.<%-- Here I am writing some Jquery Code for show loading panel at proper place --%> <script src="Scripts/jquery-1.7.1.js"></script> <script language="javascript" type="text/javascript"> function placeUP() { var mouseX; var mouseY; // below line for get mouse position $(document).mousemove(function (e) { mouseX = e.pageX; mouseY = e.pageY; }); // below line for show loading panel at proper place $('#<%= TreeView1.ClientID%> a').click(function () { $('#UP').css({'top': mouseY, 'left': mouseX}); }); } </script>HTML Code
<h3>Populate Treeview Nodes Dynamically (On Demand)</h3> <%-- Scripr manager is required as we are using AJAX --%> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <%-- UpdateProgress is used for show loading panel while loading child nodes --%> <asp:UpdateProgress ID="UpdateProgress1" runat="server"> <ProgressTemplate> <div id="UP" style="position:absolute;background-image:url('ajax-loader.gif'); background-repeat:no-repeat; width:20px;"> </div> </ProgressTemplate> </asp:UpdateProgress> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <script type="text/javascript"> Sys.Application.add_load(placeUP); </script> <%-- Here ExpandDepth="0" for eleminates the expansion of the added treenodes --%> <asp:TreeView ID="TreeView1" runat="server" ExpandDepth="0" PopulateNodesFromClient="false" OnTreeNodePopulate="TreeView1_TreeNodePopulate" > </asp:TreeView> </ContentTemplate> </asp:UpdatePanel>
Step-7: Write following code in Page_Load event for Show data (Main) in Treeview.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { PopulateCountry(); } }
private void PopulateCountry() { List<CountryMaster> allCountry = new List<CountryMaster>(); using (MyDatabaseEntities dc = new MyDatabaseEntities()) { allCountry = dc.CountryMasters.ToList(); } foreach (CountryMaster c in allCountry) { TreeNode t = new TreeNode(c.CountryName, c.CountryID.ToString()); t.PopulateOnDemand = true; TreeView1.Nodes.Add(t); } }
Step-8: Write following code in TreeView1_TreeNodePopulate event for Populate Sub Node(s) under Main Node in Treeview
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e) { // This code is for populate Child nodes TreeNode main = e.Node; int countryID = Convert.ToInt32(main.Value); List<StateMaster> allState = new List<StateMaster>(); using (MyDatabaseEntities dc = new MyDatabaseEntities()) { allState = dc.StateMasters.Where(a => a.CountryID.Equals(countryID)).OrderBy(a => a.StateName).ToList(); } foreach (StateMaster s in allState) { TreeNode sub = new TreeNode(s.StateName, s.StateID.ToString()); main.ChildNodes.Add(sub); } }