在做下面的操作时(实现栏目的无限级树形列表),出现了如题的错误!
原始代码如下
string QuerySql = "select id,title,[level],parentid from newscata where websitekey='" + webkey + "' and (isnull(issetediter,0)!=1 or editers like '%," + uid + ",%') order by id ";//sql try { DataSet myset = SqlServerPro.ExecuteOneSqlDataSet(constring, QuerySql);//获得结果集 foreach (DataRow iRow in myset.Tables[0].Rows) { if (iRow["parentId"].ToString() == "0") { iRow["parentId"] = DBNull.Value; } } //处理没有父值导致的异常 //for (int i = 0; i < 10; i++) //{ // for (int j = 0; j < myset.Tables[0].Rows.Count; j++) // { // bool biaozhi=false; // string x = myset.Tables[0].Rows[j]["parentId"].ToString(); // for (int m = 0; m < myset.Tables[0].Rows.Count; m++) // { // if (x == DBNull.Value.ToString() || x == myset.Tables[0].Rows[m]["id"].ToString()) // { // biaozhi = true; // break; // } // } // if (!biaozhi) // { // myset.Tables[0].Rows[j].Delete(); // myset.Tables[0].AcceptChanges(); // } // } //} myset.Relations.Add("NodeRela", myset.Tables[0].Columns["id"], myset.Tables[0].Columns["parentid"]); foreach (DataRow mRow in myset.Tables[0].Rows) { if (mRow.IsNull("Parentid")) { ListItem item = new ListItem(); item.Text = mRow["title"].ToString(); item.Value = mRow["id"].ToString(); mDown.Items.Add(item); BuildSubTreeGrant(mRow, mDown); } } } catch (Exception ex) { throw new Exception(ex.Message); } }
解决办法有两种。
一种是对方法进行更改,这种方法最安全,最保险。因为这是asp.net自带。
将代码
myset.Relations.Add("NodeRela", myset.Tables[0].Columns["id"], myset.Tables[0].Columns["parentid"]);
更换为
myset.Relations.Add("NodeRela", myset.Tables[0].Columns["id"], myset.Tables[0].Columns["parentid"],false);
另一种方法是:自己写代码处理,如上面的代码中注释掉的部分,对最多10级别的栏目进行处理。
本文介绍了解决ASP.NET中实现无限级树形列表时出现的错误的方法。通过调整代码,确保正确处理数据集中存在的空父ID值,避免运行时异常。提供了两种解决方案:一是修改关系添加方式;二是自定义代码进行数据处理。
1496

被折叠的 条评论
为什么被折叠?



