Solved

DropDownList1_SelectedIndexChanged and TreeView

Posted on 2007-12-05
12
1,470 Views
Last Modified: 2013-11-26
Hi..

I have a DropDownList1 and a treeview.
dropdown has years 2006, 2007 values - and what I am trying to achieve is that whenever dropdown value changes, reloading the treeview.

So far, it is working with a small bug.

when the page loads, everything is looking good. Dropdown value is 2006. then, if I change the value on the dropdown to 2007, my treeview reloads for 2007 data - GOOD.

... but, If I change the dropdown value again to 2006, treeview does not do nothing and keep the 2007 data.... why is that?

I am wondering if I am not setting "PopulateOnDemand = true" correctly...

Thanks ...

Here are my code:

in my form.aspx:

                    <asp:DropDownList ID="DropDownList1" runat="server" Width="80px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True" >
                        <asp:ListItem>2006</asp:ListItem>
                        <asp:ListItem>2007</asp:ListItem>
                    </asp:DropDownList>&nbsp;
                    <br />
                    <asp:TreeView ID="TreeView4" OnTreeNodePopulate="PopulatePayPeriods" ExpandDepth="0" runat="server" NodeWrap="True">
                        <Nodes>
                            <asp:TreeNode Text="Pay Periods" SelectAction="Expand" PopulateOnDemand="True" Value="Pay Periods"/>
                        </Nodes>
                    </asp:TreeView>
--------------------------------------
in the form.aspx.cs
--------------------------------------
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            TmpYear = DropDownList1.Text;
            TreeView4.ExpandDepth = 0;
        }

        public void PopulatePayPeriods(Object source, TreeNodeEventArgs e)
        {
            TmpYear = DropDownList1.Text;
            switch (e.Node.Depth)
            {
                case 0:
                    GetPayPeriods1(e.Node);
                    break;
            }
        }
        void GetPayPeriods1(TreeNode node)
        {
            PayPeriodList payperiods = GetPayPeriods();
            if (null != payperiods)
            {
                foreach (PayPeriod c in payperiods)
                {

                    TreeNode newNode = new TreeNode(c.PayMonth + " - " + c.PayDate, c.Id);
                    newNode.SelectAction = TreeNodeSelectAction.Expand;
                    //newNode.PopulateOnDemand = true;
                    node.ChildNodes.Add(newNode);

                    //TreeNode newNodeChild = new TreeNode("\t" + c.PayPeriodStart + " to " + c.PayPeriodEnd, c.Id);
                    //newNodeChild.SelectAction = TreeNodeSelectAction.Expand;
                    //newNodeChild.PopulateOnDemand = true;
                    //newNode.ChildNodes.Add(newNodeChild);
                }
            }
            else
            {
                TreeNode newNode = new TreeNode("No Record Found", "0");
                newNode.SelectAction = TreeNodeSelectAction.Expand;
                newNode.PopulateOnDemand = true;
                node.ChildNodes.Add(newNode);
            }
        }
        public PayPeriodList GetPayPeriods()
        {
            //string TmpYear = DateTime.Now.Year.ToString();
            TmpYear = DropDownList1.Text;
            PayPeriodList payperiods = new PayPeriodList();

            OleDbConnection DbConn = new OleDbConnection(ConfigurationManager.ConnectionStrings["AM"].ConnectionString);
            DbConn.Open();
            DataSet Dt = new DataSet();
            OleDbDataAdapter Da = new OleDbDataAdapter("Select ID, PayMonth, PayDate, PayPeriodStart, PayPeriodEnd from TblPayPeriods Where PayYear = '" + TmpYear + "' Order By  PayPeriodSeq", DbConn);
            Da.Fill(Dt);
            DataTable dataTbl = Dt.Tables[0];
            int i;

            if (dataTbl.Rows.Count == 0)
            {
                return null;
            }
            else
            {
                for (i = 0; i <= dataTbl.Rows.Count - 1; i++)
                {
                    payperiods.Add(new PayPeriod(
                        dataTbl.Rows[i]["ID"].ToString(),
                        dataTbl.Rows[i]["PayMonth"].ToString(),
                        Convert.ToDateTime(dataTbl.Rows[i]["PayDate"]),
                        Convert.ToDateTime(dataTbl.Rows[i]["PayPeriodStart"]),
                        Convert.ToDateTime(dataTbl.Rows[i]["PayPeriodEnd"])));
                }
                return payperiods;
            }
        }
        public class PayPeriod
        {
            public string Id;
            public string PayMonth;
            public string PayPeriodStart;
            public string PayPeriodEnd;
            public string PayDate;

            public PayPeriod(String id, String PPayMonth, DateTime PPayPeriodStart, DateTime PPayPeriodEnd, DateTime PPayDate)
            {
                this.Id = id;
                this.PayMonth = PPayMonth;
                this.PayPeriodStart = Convert.ToDateTime(PPayPeriodStart).ToString("MMM/dd/yyyy");
                this.PayPeriodEnd = Convert.ToDateTime(PPayPeriodEnd).ToString("dd/yyyy");
                this.PayDate = Convert.ToDateTime(PPayDate).ToString("dd/yyyy");
            }
        }

        public class PayPeriodList : ArrayList
        {

            public new PayPeriod this[int i]
            {
                get
                {
                    return (PayPeriod)base[i];
                }
                set
                {
                    base[i] = value;
                }
            }
        }

0
Comment
Question by:neonlights
  • 6
  • 3
  • 2
  • +1
12 Comments
 
LVL 12

Accepted Solution

by:
needo_jee earned 250 total points
ID: 20414611
why you dont call your treeview update here inside index change event?

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            TmpYear = DropDownList1.Text;

            TreeView4.ExpandDepth = 0;
PoupuLateMyTreeFromDB(YearValue) ;//DropDownList1.Text
        }
0
 

Author Comment

by:neonlights
ID: 20414641
Thanks needo jee..

what will be the PoupuLateMyTreeFromDB(YearValue)?
Thanks
0
 

Author Comment

by:neonlights
ID: 20414718
because, if you look at my code above:

I can either use:
       void GetPayPeriods1(TreeNode node)
so, if I want to call this GetPayPeriods1(???) what will is ???

0
 
LVL 14

Assisted Solution

by:chinu1310
chinu1310 earned 150 total points
ID: 20414777
Hi,

PoupuLateMyTreeFromDB . This will be your function which will fetch the data from database using the passed input parameter which is Year and bind that result to your tree view control.
Whrere year is getting the value from "  DropDownList1.Text "

Hope it helps.

0
 
LVL 10

Assisted Solution

by:Alpesh Patel
Alpesh Patel earned 100 total points
ID: 20414815
Needo_jee is right
you have to get effect on the selectedchange event of dropdown button
so just change your logic and do in that way
0
 

Author Comment

by:neonlights
ID: 20414878
Hi both.. I am sorry I do not understand.. I am new to asp.net..

where is PoupuLateMyTreeFromDB coming from? sorry, not following you guys.

you see, I have this GetPayPeriods1(TreeNode node)

How about if I psss a root node to this procedure?
In my case, it will be root node - do you guys know how would I do that?

So far I have:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            TreeView4.ExpandDepth = 0;
            PoupuLateTreeView4();
        }
        public void PoupuLateTreeView4()
        {
            TreeView4.Nodes.Clear();
            TreeView4.Nodes.Add("Pay Periods"); --- will be my root node
            GetPayPeriods1(TreeView4.Nodes[0]);
        }

--------- code ------------

void GetPayPeriods1(TreeNode node)
        {
            PayPeriodList payperiods = GetPayPeriods();
            if (null != payperiods)
            {
                foreach (PayPeriod c in payperiods)
                {

                    TreeNode newNode = new TreeNode(c.PayMonth + " - " + c.PayDate, c.Id);
                    newNode.SelectAction = TreeNodeSelectAction.Expand;
                    node.ChildNodes.Add(newNode);
                }
            }
            else
            {
                TreeNode newNode = new TreeNode("No Record Found", "0");
                newNode.SelectAction = TreeNodeSelectAction.Expand;
                newNode.PopulateOnDemand = true;
                node.ChildNodes.Add(newNode);
            }
        }
0
What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 10

Expert Comment

by:Alpesh Patel
ID: 20414954
where is your GetPayPeriods() code
show me that code
0
 
LVL 14

Expert Comment

by:chinu1310
ID: 20414957
On what parameters you are fetching pay periods form db? using Year if I am not missing ?Where you are passing this value.

0
 

Author Comment

by:neonlights
ID: 20415253
I guess I am cofusing you guys.. .

Here we go again - from the beggining...
In my form.aspx - I had a treeview. and I used OnTreeNodePopulate="PopulatePayPeriods"  and PopulateOnDemand="True" to populate the treeview.

But, then, I needed to add a dropdown to select a year. This is where I am having tough time.
I did not know at the begging that I have to use dropdown list to keep the year.

-----------CODE ----------------------------------------------------
<asp:DropDownList ID="DropDownList1" runat="server" Width="80px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True" >
                        <asp:ListItem>2006</asp:ListItem>
                        <asp:ListItem>2007</asp:ListItem>
                    </asp:DropDownList>&nbsp;

                    <asp:TreeView ID="TreeView4" OnTreeNodePopulate="PopulatePayPeriods" ExpandDepth="0" runat="server" NodeWrap="True">
                        <Nodes>
                            <asp:TreeNode Text="Pay Periods" SelectAction="Expand" PopulateOnDemand="True" Value="Pay Periods"/>
                        </Nodes>
                    </asp:TreeView>
--------------------- CODE ---------------------------------------------

and if you notice, I have OnTreeNodePopulate="PopulatePayPeriods"  and PopulateOnDemand="True"
Now, PopulatePayPeriods is:

---------------- CODE PopulatePayPeriods-------------------------------------------------
public void PopulatePayPeriods(Object source, TreeNodeEventArgs e)
        {
            string TmpYear = DropDownList1.Text;
            switch (e.Node.Depth)
            {
                case 0:
                    GetPayPeriods1(e.Node);
                    break;
            }
        }
---------------- CODE GetPayPeriods1-------------------------------------------------

        void GetPayPeriods1(TreeNode node)
        {
            PayPeriodList payperiods = GetPayPeriods();
            if (null != payperiods)
            {
                foreach (PayPeriod c in payperiods)
                {

                    TreeNode newNode = new TreeNode(c.PayMonth + " - " + c.PayDate, c.Id);
                    newNode.SelectAction = TreeNodeSelectAction.Expand;
                    newNode.PopulateOnDemand = false;
                    node.ChildNodes.Add(newNode);
                }
            }
            else
            {
                TreeNode newNode = new TreeNode("No Record Found", "0");
                newNode.SelectAction = TreeNodeSelectAction.Expand;
                newNode.PopulateOnDemand = true;
                node.ChildNodes.Add(newNode);
            }
        }
--------------------------------CODE GetPayPeriods--------------------------------
        public PayPeriodList GetPayPeriods()
        {
            //string TmpYear = DateTime.Now.Year.ToString();
            string TmpYear = DropDownList1.Text;
            PayPeriodList payperiods = new PayPeriodList();

            OleDbConnection DbConn = new OleDbConnection(ConfigurationManager.ConnectionStrings["AM"].ConnectionString);
            DbConn.Open();
            DataSet Dt = new DataSet();
            OleDbDataAdapter Da = new OleDbDataAdapter("Select ID, PayMonth, PayDate, PayPeriodStart, PayPeriodEnd from TblPayPeriods Where PayYear = '" + TmpYear + "' Order By  PayPeriodSeq", DbConn);
            Da.Fill(Dt);
            DataTable dataTbl = Dt.Tables[0];
            int i;

            if (dataTbl.Rows.Count == 0)
            {
                return null;
            }
            else
            {
                for (i = 0; i <= dataTbl.Rows.Count - 1; i++)
                {
                    payperiods.Add(new PayPeriod(
                        dataTbl.Rows[i]["ID"].ToString(),
                        dataTbl.Rows[i]["PayMonth"].ToString(),
                        Convert.ToDateTime(dataTbl.Rows[i]["PayDate"]),
                        Convert.ToDateTime(dataTbl.Rows[i]["PayPeriodStart"]),
                        Convert.ToDateTime(dataTbl.Rows[i]["PayPeriodEnd"])));
                }
                return payperiods;
            }
        }
--------------------------------CODE Class PayPeriod--------------------------------
        public class PayPeriod
        {
            public string Id;
            public string PayMonth;
            public string PayPeriodStart;
            public string PayPeriodEnd;
            public string PayDate;

            public PayPeriod(String id, String PPayMonth, DateTime PPayPeriodStart, DateTime PPayPeriodEnd, DateTime PPayDate)
            {
                this.Id = id;
                this.PayMonth = PPayMonth;
                this.PayPeriodStart = Convert.ToDateTime(PPayPeriodStart).ToString("MMM/dd/yyyy");
                this.PayPeriodEnd = Convert.ToDateTime(PPayPeriodEnd).ToString("dd/yyyy");
                this.PayDate = Convert.ToDateTime(PPayDate).ToString("dd/yyyy");
            }
        }

--------------------------------CODE Class PayPeriodList--------------------------------

        public class PayPeriodList : ArrayList
        {

            public new PayPeriod this[int i]
            {
                get
                {
                    return (PayPeriod)base[i];
                }
                set
                {
                    base[i] = value;
                }
            }
        }

------------------- WHERE I AM NOW--------------------------------

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            TreeView4.ExpandDepth = 0;
            PoupuLateTreeView4();
        }

        public void PoupuLateTreeView4()
        {
            GetPayPeriods1(TreeView4.Nodes[0]);
        }

It is working - except that previous nodes are not clearing .. and everytime I change the value in the dropdown, it is keep filling my treeview.. without clearing my treeview.
0
 

Author Comment

by:neonlights
ID: 20415263
I am not passing dropdown year value - since I can get that value from:
eg:

public PayPeriodList GetPayPeriods()
        {
            //string TmpYear = DateTime.Now.Year.ToString();
            string TmpYear = DropDownList1.Text;
....


0
 
LVL 14

Expert Comment

by:chinu1310
ID: 20415284
Add this to selected index change event of your drop down

TreeView4.Nodes.Clear();
0
 

Author Comment

by:neonlights
ID: 20420190
hi,

Thanks for all your answers and suggestions.. do not know why I got lost in this one.. it was very easy.. sorry for the confusion.

thanks all
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
Problem Hi all,    While many today have fast Internet connection, there are many still who do not, or are connecting through devices with a slower connect, so light web pages and fast load times are still popular.    If your ASP.NET page …
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now