Shortening a TreeView logic.

Posted on 2009-04-02
Medium Priority
Last Modified: 2013-12-14
Hi I'm currently working on a TreeView with Oracle Database.
The thing is I have to connect to 2 databases in this TreeView and due to the column name and description naming differences I could'nt use the UNION function in the SQL statement.

So I used Code1 to populate the TreeView untill the 5th level and the code compile in less then 10 seconds.

After that I proceed to connecting the 2nd database and it'll be on the 6th level but when i put Code2 inside the "if (strList.Length == 5)" statement the code compile more then 2 minutes which is really unaccecptable.

I'm hoping if anyone could provide solutions to shorten the compilation time.
 Thanks in advaance.
// Code1
                    foreach (DataRow dr in ordt.Rows)
                        nodeCheck = new TreeNode();
                        nodeCheck.Name = dr[0].ToString();                        
                        strText = dr[2].ToString();
                        strDesc = dr[3].ToString();
                        strList = strText.Split('.');
                        nodeCheck.Text = strList[strList.Length - 1];
                        if (dr[1] != DBNull.Value)
                            node = treeScadaItems.Nodes.Find(dr[1].ToString(), true);
                            if (strList.Length == 5)
                                { node[0].Nodes.Add(nodeCheck); }
                                    // Code2
                                    localSQL = "SELECT KEYID,PRODUCT_NAME,PRODUCT_DESC,PKEYID,PRODUCT_TYPE FROM PRODUCT_PT WHERE PKEYID LIKE '" + dr[0].ToString() + "'";
                                    OracleCommand cmdOracle1 = new OracleCommand(localSQL, localConnection);
                                    cmdOracle1.CommandType = CommandType.Text;
                                    drOracle = cmdOracle1.ExecuteReader();
                                    while (drOracle.Read())
                                        nodeCheck = new TreeNode();
                                        nodeCheck.Name = dr[0].ToString();
                                        strText = drOracle.GetOracleString(1).ToString();
                                        nodeCheck.Text = strText.ToString();
                                        nodeCheck.Tag = drOracle.GetOracleValue(0).ToString();

Open in new window

Question by:csharp_learner
  • 2

Accepted Solution

kprestage earned 1500 total points
ID: 24061767
How many nodes does the first query add?  How about the second query?  Are you sure it is a code problem and not an issue with the Treeview loading too many nodes?  The Tree gets VERY slow when you start adding a lot of nodes to it.  

Assisted Solution

kprestage earned 1500 total points
ID: 24061803
Also, are you calling the treeview's BeginUpdate before your loop and EndUpdate after your loop?  If not, try that and see if you have some improvement.

Author Comment

ID: 24083680
Sorry for the late reply,

Yes your're correct there is alot of nodes the TreeView needs to load.
How can I put the BeginUpdate and EndUpdate into my code?
As I can only access to BeginEdit and BeginInvoke when i tried to access using treeview1.

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

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.

Join & Write a Comment

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.

619 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