读书人

TreeView的有关问题!点一下节点马上报

发布时间: 2013-09-12 22:07:00 作者: rapoo

TreeView的问题!点一下节点马上报错

<div>
<asp:TreeView ID="Tree" runat="server" DataSourceID="XDS" ShowLines="True" OnSelectedNodeChanged="Tree_SelectedNodeChanged" OnTreeNodeCheckChanged="Tree_TreeNodeCheckChanged" OnTreeNodeDataBound="Tree_TreeNodeDataBound" Target="_self">
</asp:TreeView>
<asp:XmlDataSource ID="XDS" runat="server"></asp:XmlDataSource>
</div>
这是前台代码
int zishu(string s1, string s2)
{
int i = -1, x = -1;
do
{
i = s1.IndexOf(s2, ++i);
x++;
} while (i != -1);
return x;
}
void run()
{
string path = Server.MapPath("/");
string[] s = Directory.GetDirectories(path, "*.*", SearchOption.AllDirectories);
for (int i = 0; i < s.Length; i++)
{
s[i] = s[i].Substring(path.Length);
s[i] = s[i].Replace("\\", "/");
}
XmlDocument doc = new XmlDocument();
XmlElement xe = doc.CreateElement("根节点");
doc.AppendChild(xe);
int max = 0;
foreach (string str in s)
{
if (zishu(str, "/") > max)
{
max = zishu(str, "/");


}
}
foreach (string str in s)
{
for (int i = 0; i <= max; i++)
{
if (zishu(str, "/") == 0)
{
XmlElement xee = doc.CreateElement(str);
xee.SetAttribute("name", str);
xe.AppendChild(xee);
break;
}
else if (i != 0 && zishu(str, "/") == i)
{
string qian = str.Substring(0, str.LastIndexOf("/"));
string hou = str.Substring(str.LastIndexOf("/") + 1);
qian = "根节点/" + qian;
XmlElement xee = doc.CreateElement(hou);
xee.SetAttribute("name", hou);
XmlNode node = doc.SelectSingleNode(@qian);
node.AppendChild(xee);
break;


}
}
}
s = null;
s = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
for (int i = 0; i < s.Length; i++)
{
s[i] = s[i].Substring(path.Length);
s[i] = s[i].Replace("\\", "/");
}
foreach (string str in s)
{
string ss = str.Replace(" ", "nul");
if (str.IndexOf("/") == -1)
{
XmlElement xee = doc.CreateElement(ss);
xee.SetAttribute("name", ss);
xe.AppendChild(xee);
}
else
{
string qian = ss.Substring(0, ss.LastIndexOf("/"));
string hou = ss.Substring(ss.LastIndexOf("/") + 1);
if (hou.Substring(0, 1) == ".")
{
hou = hou.Replace(".", "");
}
qian = "根节点/" + qian;


XmlElement xee = doc.CreateElement(hou);
xee.SetAttribute("name", hou);
XmlNode node = doc.SelectSingleNode(@qian);
node.AppendChild(xee);
}
}
doc.Save(Server.MapPath("/目录.xml"));
XDS.DataFile = Server.MapPath("/目录.xml");
}


以上是后台代码。思路是把服务器的文件路径获取然后生成一个xml文档,再放到XmlDataSource数据源内。然后让其成为TreeView的数据源。也不知道是我疏忽了哪里,每次我只要点击节点就会出现错误





“/”应用程序中的服务器错误。
--------------------------------------------


未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:




执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。


堆栈跟踪:





[NullReferenceException: 未将对象引用设置到对象的实例。]
System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace) +21
System.Xml.XmlDocument.Load(XmlReader reader) +107
System.Web.UI.WebControls.XmlDataSource.PopulateXmlDocument(XmlDocument document, CacheDependency& dataCacheDependency, CacheDependency& transformCacheDependency) +455
System.Web.UI.WebControls.XmlDataSource.GetXmlDocument() +156
System.Web.UI.WebControls.XmlHierarchicalDataSourceView.Select() +17
System.Web.UI.WebControls.TreeView.DataBindNode(TreeNode node) +133
System.Web.UI.WebControls.TreeView.PopulateNode(TreeNode node) +30
System.Web.UI.WebControls.TreeView.LoadPostData(String postDataKey, NameValueCollection postCollection) +1169
System.Web.UI.WebControls.TreeView.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +13
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +734
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1960



求指点啊~~~~ treeview
[解决办法]
NullReferenceException说明有对象为null了,
另外,注意代码的执行顺序,
注意run()代码的运行与XmlDataSource加载数据源的执行顺序是谁先谁后

读书人网 >asp.net

热点推荐