This is a migrated thread and some comments may be shown as answers.

Validating Nodes

1 Answer 65 Views
TreeView
This is a migrated thread and some comments may be shown as answers.
Gavin
Top achievements
Rank 1
Gavin asked on 16 Jan 2012, 01:44 PM
Hi I'm having trouble with validating my RadTreeView. The data in the tree view is displayed from a SQL database table. This contains the following columns:

Category Id, CategoryName, Category, ParentCategoryId, SapProductCode, Company, Enabled. 

I have defined the maximum number of levels of this data to be 4. The loading and modification of nodes on the Tree View is working fine. I have a context menu that enables user to disable selected nodes (and their children). This is working fine.

However I have a button called Verify Tree Table. When this is pressed, I need to validate all the nodes in the tree view.

Basically every node needs to have either a non-disabled child or a SapProductCode. I can't figure out the algorithm to do this.Let's use the below tree view as an example

HP --> Printer --> Printer Unit  --> Printer 1 (SapProductCode)
                                                --> Printer 2 (SapProductCode)
IBM --> Desktop --> Desktop Unit (SapProductCode)
       --> Laptop --> Laptop Unit (SapProductCode)
       --> Monitor --> Monitor Unit (SapProductCode)
SAMSUNG --> Monitor --> Monitor Unit (SapProductCode)

So if I disable HP-->Printer-->Printer Unit, then this node is invalid as there are no non-disabled child nodes below. If I disable HP--> Printer--> Printer Unit --> Printer 1 (SapProductCode), then this is valid as the parent node (HP-->Printer-->Printer Unit) has a valid child node.

The code I have so far is displayed below:

protected void VerifyTreeTableButton_Click(object sender, EventArgs e)
{
    string Message;
    string TempMessage;
    int StartPosition;
    int EndPosition;
    string Tier1;
    string Tier2;
    string Tier3;
    string Tier4;
    int IntDisabledChildNodes;
 
 
 
 
    VerifyMessageLabel.Text = "<br/><br/>";
    IList<RadTreeNode> AllNodes = RadTreeView1.GetAllNodes();
    for (int i = 0; i < AllNodes.Count; i++)
    {
        RadTreeNode Node = (RadTreeNode)AllNodes[i];
 
        if (Node.Attributes["Status"].ToString() == "Created")
        {
            if (!Node.HasControls() && Node.Attributes["SapProductCode"] == "NULL")
            {
                // Get the full path of the Node using &&& as a separator
                Message = Node.GetFullPath("&&&");
 
                if (Message.Contains("&&&"))
                {
                    StartPosition = Message.IndexOf("&&&");
                    //TempMessage = Message.Substring(0, StartPosition);
 
                    Tier1 = "<b>Tier 1:</b> " + Message.Substring(0, StartPosition);
                    TempMessage = Message.Substring(StartPosition + 3);
                    VerifyMessageLabel.Text = VerifyMessageLabel.Text + Tier1;
 
                    if (TempMessage.Contains("&&&"))
                    {
                        StartPosition = TempMessage.IndexOf("&&&");
                        //TempMessage = TempMessage.Substring(0, StartPosition);
 
                        Tier2 = "<b>Tier 2:</b> " + TempMessage.Substring(0, StartPosition);
                        TempMessage = TempMessage.Substring(StartPosition + 3);
                        VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier2;
 
                        if (TempMessage.Contains("&&&"))
                        {
                            StartPosition = TempMessage.IndexOf("&&&");
 
 
                            Tier3 = "<b>Tier 3: </b> " + TempMessage.Substring(0, StartPosition);
                            TempMessage = TempMessage.Substring(StartPosition + 3);
                            VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier3;
 
 
                            if (TempMessage.Contains("&&&"))
                            {
                                StartPosition = TempMessage.IndexOf("&&&");
                                Tier4 = "<b>Tier 4: </b> " + TempMessage.Substring(0, StartPosition);
                                VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier4;
 
                            }
                            else
                            {
                                Tier4 = "<b>Tier 4:</b> " + TempMessage;
                                VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier4 + "<hr/>";
 
                            }
                        }
                        else
                        {
                            Tier3 = "<b>Tier 3:</b> " + TempMessage;
                            VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier3 + "<hr/>";
 
                        }
                    }
                    else
                    {
                        Tier2 = "<b>Tier 2:</b> " + TempMessage;
                        VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier2 + "<hr/>";
                    }
                }
                else
                {
                    Tier1 = "<b>Tier 1:</b> " + Node.Text;
                    VerifyMessageLabel.Text = VerifyMessageLabel.Text + Tier1 + "<hr/>";
                }
                //VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>";
            }
 
        }
        if (Node.Attributes["Status"].ToString() == "Disabled & Modified")
        {
            IntDisabledChildNodes = 0;
 
            if (Node.Level > 0)
            {
                if (Node.Parent.Controls.Count >= 1)
                {
                    foreach (RadTreeNode node in Node.ParentNode.Nodes)
                    {
                        if (node.Attributes["Status"] == "Disabled & Modified")
                        {
                            IntDisabledChildNodes = IntDisabledChildNodes + 1;
 
 
                        }
 
 
                    }
                }
                // If the number of Disabled Child nodes are equal to the count
                // of the parent's child nodes, then this means that all child nodes
                // are disabled and therefore we need to flag the parent node
                if (IntDisabledChildNodes >= Node.Parent.Controls.Count)
                {
                    // Get the full path of the Node using &&& as a separator
                    Message = Node.GetFullPath("&&&");
 
 
 
                    if (Message.Contains("&&&"))
                    {
                        StartPosition = Message.IndexOf("&&&");
                        //TempMessage = Message.Substring(0, StartPosition);
 
                        Tier1 = "<b>Tier 1:</b> " + Message.Substring(0, StartPosition);
                        TempMessage = Message.Substring(StartPosition + 3);
                        VerifyMessageLabel.Text = VerifyMessageLabel.Text + Tier1;
 
                        if (TempMessage.Contains("&&&"))
                        {
                            StartPosition = TempMessage.IndexOf("&&&");
                            //TempMessage = TempMessage.Substring(0, StartPosition);
 
 
                            Tier2 = "<b>Tier 2:</b> " + TempMessage.Substring(0, StartPosition);
                            TempMessage = TempMessage.Substring(StartPosition + 3);
                            VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier2;
 
 
                            if (TempMessage.Contains("&&&"))
                            {
                                StartPosition = TempMessage.IndexOf("&&&");
 
 
                                Tier3 = "<b>Tier 3: </b> " + TempMessage.Substring(0, StartPosition);
                                TempMessage = TempMessage.Substring(StartPosition + 3);
                                VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier3;
 
 
                                if (TempMessage.Contains("&&&"))
                                {
                                    StartPosition = TempMessage.IndexOf("&&&");
                                    Tier4 = "<b>Tier 4: </b> " + TempMessage.Substring(0, StartPosition);
                                    VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier4;
 
                                }
                                else
                                {
                                    Tier4 = "<b>Tier 4:</b> " + TempMessage;
                                    VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier4 + "<hr/>";
 
 
                                }
 
                            }
                            else
                            {
                                Tier3 = "<b>Tier 3:</b> " + TempMessage;
                                VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier3 + "<hr/>";
 
 
                            }
 
 
 
                        }
                        else
                        {
                            Tier2 = "<b>Tier 2:</b> " + TempMessage;
                            VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>" + Tier2 + "<hr/>";
                        }
                    }
                    else
                    {
                        Tier1 = "<b>Tier 1:</b> " + Node.Text;
                        VerifyMessageLabel.Text = VerifyMessageLabel.Text + Tier1 + "<hr/>";
                    }
                    //VerifyMessageLabel.Text = VerifyMessageLabel.Text + "<br/>";
 
 
 
                }
 
 
            }
 
 
        }
 
 
    }
    if (VerifyMessageLabel.Text != "<br/><br/>")
    {
        VerifyErrorMessage.Visible = true;
        VerifyErrorMessage.Text = @"There are some nodes which have no children and have no Product / Contract / Function Location. Or they are disabled and their
                              parent nodes have no other non-disabled children.
                              Please correct these and reverify";
 
        VerifyCancelButton.Visible = false;
        ModalPopupExtender2.Show();
    }
    else
    {
        VerifyErrorMessage.Visible = true;
        VerifyErrorMessage.Text = @"All nodes verified successfully. Do you want to submit these changes to the database?";
        VerifyCancelButton.Visible = true;
        ModalPopupExtender2.Show();
 
    }
 
}
Can anybody help me with this verification code? I'd prefer to perform all of this in server side code.

Any help appreciated!

Thanks,

1 Answer, 1 is accepted

Sort by
0
Gavin
Top achievements
Rank 1
answered on 18 Jan 2012, 10:12 AM
I've sorted this. My problem was that when the user was disabling a node, that node and all its children had an attribute set of ["Status"] = "Disabled & Modified". When I changed the attributes of the child nodes to be ["Status"] = "Disabled", my code worked.

SImply put I only needed to check the disabled node and its parents for invalidity and not the disabled nodes children.

Hope this helps somebody else!

Thanks,
Tags
TreeView
Asked by
Gavin
Top achievements
Rank 1
Answers by
Gavin
Top achievements
Rank 1
Share this question
or