Click here to Skip to main content
15,887,214 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I have written the following code to create a tree view: it reads data from a sqlCEserver and generates view according. It was working fine before i entered the inner while loop to add sub items in header.

C#
private void ClientTree_Initialized(object sender, EventArgs e)
       {
            string moduleCat = null;
            string Cname = null;
            SqlCeConnection _con = new SqlCeConnection(@"Data Source=C:\ClientDB.sdf");
            _con.Open();
            SqlCeDataReader _reader = null;
            SqlCeDataReader _reader1 = null;
            SqlCeCommand readMod = new SqlCeCommand(@"SELECT DISTINCT ModuleID FROM ClientRecord", _con);

            _reader = readMod.ExecuteReader();
            while(_reader.Read())
            {

                moduleCat = _reader["ModuleID"].ToString();

                treeItem = new TreeViewItem();
                treeItem.Header = moduleCat;

                SqlCeCommand readName = new SqlCeCommand(@"SELECT Cname FROM ClientRecord WHERE (ModuleID = '" + moduleCat + @"')", _con);
                _reader1 = readName.ExecuteReader();
                while (_reader1.Read())
                {
                    Cname = _reader["Cname"].ToString();
                    treeItem.Items.Add(new TreeViewItem() { Header = Cname });
                    ClientTree.Items.Add(treeItem);
                }
            }
        }

it gave this exception:

XML
System.Windows.Markup.XamlParseException occurred
  HResult=-2146233087
  Message='Initialization of 'System.Windows.Controls.TreeView' threw an exception.' Line number '10' and line position '99'.
  Source=PresentationFramework
  LineNumber=10
  LinePosition=99


line number 10 is:

XML
<TreeView x:Name="ClientTree" Height="350.4" Width="164.2" HorizontalAlignment="Left" VerticalAlignment="Top" Initialized="ClientTree_Initialized" />
Posted
Updated 4-Sep-13 2:00am
v2

1 solution

I think the issue is with the code in your second while loop. Notice that you are looking in the _reader for the 'Cname' field which isn't in this reader...
C#
while (_reader1.Read())
{
    Cname = _reader["Cname"].ToString();
    treeItem.Items.Add(new TreeViewItem() { Header = Cname });
    ClientTree.Items.Add(treeItem);
}

...I am pretty sure you want to call the second reader (_reader1) in your second while loop. Like so...
C#
while (_reader1.Read())
{
    Cname = _reader1["Cname"].ToString();
    treeItem.Items.Add(new TreeViewItem() { Header = Cname });
    ClientTree.Items.Add(treeItem);
}
 
Share this answer
 
v2
Comments
Crixus 19-Aug-13 15:59pm    
Yes that was the problem and this line
ClientTree.Items.Add(treeItem);
comes outside the while loop.
Silly mistake. Thanks
please see if you can answer my other question.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900