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

本文介绍了解决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级别的栏目进行处理。

<think> 我们正在讨论Allegro 17.4中Match Group不显示线长和与目标差距的问题。根据用户提供的引用内容,我们知道在Allegro中设置Match Group(等长组)的步骤,包括创建Match Group和设置等长范围(tolerance)。但是,现在遇到的问题是设置了Match Group后,在PCB界面没有显示线长和与目标的差距。 可能的原因和解决方案如下: 1. **显示设置未开启**:在Allegro中,需要开启相应的显示选项才能看到线长和差。 - 解决方案:在PCB设计界面,确保在“Color”设置中,已经打开了“Rat T”的显示。具体步骤:点击顶部菜单栏的“Display”->“Color/Visibility...”,在打开的对话框中,找到“Rat T”选项(通常位于“Board Geometry”或“Nets”下),确保其可见性被打开。 2. **未启用相关显示功能**:Allegro可能需要启用特定的显示功能来展示长度信息。 - 解决方案:在PCB设计界面,尝试在“Display”菜单中勾选“Show Element”或类似的选项(具体名称可能有所不同),然后点击网络线,查看是否有长度信息显示。另外,检查“Constraint Manager”中的设置,确保等长约束已经正确应用。 3. **约束管理器设置问题**:Match Group的约束可能没有正确设置或应用。 - 解决方案:打开“Constraint Manager”(约束管理器),在“Electrical”->“Net”->“Routing”->“Relative Propagation Delay”下,找到你设置的Match Group。检查该Match Group是否被正确分配了目标和公差(tolerance)。同时,确认相关的网络是否已经加入到该Match Group中。 4. **未进行长度分析**:Allegro可能需要手动触发长度分析才能显示。 - 解决方案:在约束管理器中,选中你的Match Group,然后右键选择“Analyze”或“Update DRC”。这样系统会计算当前的长度和与目标的差距,并更新显示。 5. **软件版本或显示问题**:有时候可能是软件本身的显示问题。 - 解决方案:尝试重启Allegro软件,或者重新应用约束。另外,确保你的软件版本已经更新到最新补丁。 6. **视图显示模式**:当前的视图显示模式可能隐藏了这些信息。 - 解决方案:在PCB设计窗口,确保你处于合适的显示模式(例如,在布线模式下)。同时,尝试使用快捷键“F5”刷新屏幕。 7. **未显示差标签**:即使设置了Match Group,默认可能不会显示差标签。 - 解决方案:在约束管理器中,找到Match Group,右键选择“SigXplorer”或“Show Report”,查看详细的长度信息。另外,在PCB设计窗口,可以尝试通过“Display”->“Show Rats”->“Net”或“All”来显示飞线,然后使用“Display”->“Element”命令,点击网络线,查看信息。 8. **DRC标记未显示**:如果长度不符合约束,可能会显示DRC标记,但如果没有显示,可能是DRC显示被关闭。 - 解决方案:确保DRC标记是打开的。在“Color”设置中,检查“DRC”的可见性。 根据引用[1]的内容,我们设置了Match Group并指定了公差,但可能由于上述原因导致显示问题。请按照上述步骤逐一排查。 如果上述方法仍不能解决问题,建议查阅Allegro官方文档或联系Cadence技术支持。 相关问题: 1. 如何在Allegro 17.4中设置差分对的等长? 2. Allegro约束管理器中的Relative Propagation Delay设置详解。 3. 如何查看Allegro中网络的布线长度? 4. 在Allegro中如何调整等长线的走线? 5. Allegro中设置Match Group后如何验证等长是否满足? </think> 在Allegro 17.4中,Match Group不显示线长和与目标差距的问题通常由以下原因及解决方案引起: ### 主要原因及解决方案 1. **约束管理器设置未生效** - **原因**:创建Match Group后未在约束管理器中激活等长约束 - **解决**: ```text ① 打开约束管理器(Tools → Constraint Manager) ② 导航至 Electrical → Net → Relative Propagation Delay ③ 右键目标Match Group → 勾选"Active"和"Define as Target" ④ 在Tolerance列输入公差(如50mil)并回车 ``` 2. **显示参数未启用** - **原因**:PCB Editor的显示过滤设置未开启等长信息 - **解决**: ```text ① 执行菜单命令 Display → Property ② 在"Filter"选项卡勾选: ✔ Constraint_Manager ✔ Rat T (T点飞线) ③ 在"Color"选项卡启用Board Geometry/RAT T层颜色 ``` 3. **未更新设计状态** - **原因**:网络拓扑变化后未重新分析延迟 - **解决**: ```text ① 在约束管理器选中Match Group ② 右键 → Analyze → Update DRC ③ 按F5刷新PCB视图 ``` 4. **网络未包含在Match Group** - **原因**:目标网络未正确分配到组内 - **解决**: ```text ① 在Relative Propagation Delay界面 ② 拖拽网络名到目标Match Group下方 ③ 检查网络左侧是否显示绿色√标识 ``` ### 操作示意图 ```plaintext [约束管理器正确配置示例] Match Group名称 │ Active │ Define as Target │ Tolerance │ Delta ────────────────┼────────┼──────────────────┼───────────┼──────── DDR_CLK_GROUP │ ☑ │ ☑ │ 50mil │ 显示差 ``` ### 验证步骤 1. 布线后选择菜单Route → Timing Vision 2. 悬停光标在目标网络上 3. 正常显示应出现悬浮标签: ```plaintext Total Etch: 1520mil Target: 1500mil Delta: +20mil ``` > 注意:若仍不显示,尝试重置用户配置 > 删除 `$HOME/pcadspcb_env` 文件夹后重启软件[^1] --- ### 相关问题 1. 如何在Allegro中为差分对创建Match Group? 2. 等长约束DRC报错(**)如何解决? 3. Allegro 17.4的Timing Vision模式有哪些高级功能? 4. 如何导出Match Group的等长报告? 5. 高速设计中Match Group的Tolerance设置原则是什么? [^1]: 引用自Allegro官方约束管理器配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值