1

我编写了以下代码来创建树视图:它从 sqlCEserver 读取数据并据此生成视图。在我进入内部 while 循环以在标题中添加子项之前,它工作正常。

private void ClientTree_Initialized(object sender, EventArgs e)
       {
            string moduleCat = null;
            string Cname = null;
            SqlCeConnection _con = new SqlCeConnection(@"Data Source=C:\Users\Family\Desktop\Tranchulas projects\ControlCenter\ControlCenter\bin\Debug\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);
                }
            }
        }

它给出了这个例外:

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

第 10 行是:

<TreeView x:Name="ClientTree" Height="350.4" Width="164.2" HorizontalAlignment="Left" VerticalAlignment="Top" Initialized="ClientTree_Initialized" />
4

1 回答 1

0

如果当您注释掉内部 while 循环时问题消失了,那么它在 xaml 中就不是问题了。(因为没有任何改变)对吧??但是,您的异常表明它是 xamlParseException,很奇怪。

您可以在这里做的最好的事情是将行 InitializeComponent() 放在 try-catch 语句中,并在 catchblock 中设置断点。现在您可以访问完整的堆栈跟踪以及您需要的所有内部异常信息!祝你好运。

InitializeComponent 在代码隐藏的构造函数中。

try
{
  InitializeComponent();
}
catch ( Exception ex )
{
  // set breakpoint here, and watch StackTrace
}
于 2013-08-19T09:29:36.877 回答