不能启用此约束,因为不是所有的值都具有相应的父值. 的解决方案

本文介绍了解决ASP.NET中实现无限级树形列表时出现的错误的方法。通过调整代码,确保正确处理数据集中存在的空父ID值,避免运行时异常。提供了两种解决方案:一是修改关系添加方式;二是自定义代码进行数据处理。

在做下面的操作时(实现栏目的无限级树形列表),出现了如题的错误!

原始代码如下

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级别的栏目进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值