DropDownList1_SelectedIndexChanged and TreeView

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;
                }
            }
        }

neonlightsAsked:
Who is Participating?
 
Munawar HussainPrincipal Software EngineerCommented:
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
 
neonlightsAuthor Commented:
Thanks needo jee..

what will be the PoupuLateMyTreeFromDB(YearValue)?
Thanks
0
 
neonlightsAuthor Commented:
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
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
chinu1310Commented:
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
 
Alpesh PatelCommented:
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
 
neonlightsAuthor Commented:
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
 
Alpesh PatelCommented:
where is your GetPayPeriods() code
show me that code
0
 
chinu1310Commented:
On what parameters you are fetching pay periods form db? using Year if I am not missing ?Where you are passing this value.

0
 
neonlightsAuthor Commented:
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
 
neonlightsAuthor Commented:
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
 
chinu1310Commented:
Add this to selected index change event of your drop down

TreeView4.Nodes.Clear();
0
 
neonlightsAuthor Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.