C# chkE.tag=g;} 如果(isChecked==true){g=2;chkE.tag=g;} 警报(id+'\nisChecked='+isChecked+'\n.tag='+g); }//函数chkBox\u click8(id) 功能chkBox\u单击它(id) {var chkE=document.getElementById('chkBox--'+id);//复选框HTML元素 如果(chkE!=null){chkE.click();} }//函数chkBox\u单击它(id) 函数getParentID(id) { var pid=String(id);if(pid.length0){s=s.substr(x);} } h+=''+s+后缀; var cnt=dta['checkedSubNodeCount-->+id];//已检查子节点的计数 if(cnt!=null)//如果此节点是父节点 {var chkE=document.getElementById('chkBox--'+id);//复选框HTML元素 如果(chkE!=null){chkE.style.display=(cnt>0)?“无”:“”;} var hBeg=“”; var hEnd=“”; 如果(cnt>0){h+=hBeg+''+hEnd;} 如果(chkE==null){h+=hBeg+hEnd;} } lblE.innerHTML=h; }//函数setLabelHtm(id) 函数init() {//alert('yes'); hdrLab_单击(“1”); hdrLab_单击(“1-a”); hdrLab_点击('19'); hdrLab_点击(“19-a”); hdrLab_点击('19-a-1-'); hdrLab_点击('19-a-2-'); hdrLab_点击(“19-b”); hdrLab_点击('19-b-1-'); hdrLab_点击('19-b-2-'); hdrLab_点击('19-b-3-'); hdrLab_点击(“19-c”); hdrLab_点击('19-c-1-'); hdrLab_点击('19-c-2-'); hdrLab_点击('19-c-3-'); hdrLab_点击('22'); hdrLab_点击(“22-a”); hdrLab_点击(“22-b”); hdrLab_点击('23'); hdrLab_点击(“24”); hdrLab_点击(“24-a”); hdrLab_点击(“24-b”); hdrLab_点击(“24-c”); hdrLab_点击('25'); hdrLab_点击('25-a-'); hdrLab_点击('144'); hdrLab_点击('144-a'); hdrLab_click('1728'); hdrLab_click('1728-a'); //警报(dta['checkedSubNodeCount--19-a']); } window.onload=init; 短数字“1”的测试: 短编号“1”子项的测试: 你喜欢哪种水果 苹果: 鲜红可口 史密斯奶奶 香蕉: 绿色的 黄色(成熟但不太成熟) 棕色(非常成熟) 果汁 橙汁 葡萄汁 番茄汁 你喜欢哪种果汁 苹果汁 橙汁 无子节点的单勾选问题 最佳操作系统 安卓 苹果 Linux 用子节点检查检查问题 子节点检查问题 测试3位数字: 3位数字子项的测试: 测试4位数字: 4位数字子项的测试: var ua=navigator.userAgent; 变量ieVersion=null; var ix=0; 对于(var v=7;v

C# chkE.tag=g;} 如果(isChecked==true){g=2;chkE.tag=g;} 警报(id+'\nisChecked='+isChecked+'\n.tag='+g); }//函数chkBox\u click8(id) 功能chkBox\u单击它(id) {var chkE=document.getElementById('chkBox--'+id);//复选框HTML元素 如果(chkE!=null){chkE.click();} }//函数chkBox\u单击它(id) 函数getParentID(id) { var pid=String(id);if(pid.length0){s=s.substr(x);} } h+=''+s+后缀; var cnt=dta['checkedSubNodeCount-->+id];//已检查子节点的计数 if(cnt!=null)//如果此节点是父节点 {var chkE=document.getElementById('chkBox--'+id);//复选框HTML元素 如果(chkE!=null){chkE.style.display=(cnt>0)?“无”:“”;} var hBeg=“”; var hEnd=“”; 如果(cnt>0){h+=hBeg+''+hEnd;} 如果(chkE==null){h+=hBeg+hEnd;} } lblE.innerHTML=h; }//函数setLabelHtm(id) 函数init() {//alert('yes'); hdrLab_单击(“1”); hdrLab_单击(“1-a”); hdrLab_点击('19'); hdrLab_点击(“19-a”); hdrLab_点击('19-a-1-'); hdrLab_点击('19-a-2-'); hdrLab_点击(“19-b”); hdrLab_点击('19-b-1-'); hdrLab_点击('19-b-2-'); hdrLab_点击('19-b-3-'); hdrLab_点击(“19-c”); hdrLab_点击('19-c-1-'); hdrLab_点击('19-c-2-'); hdrLab_点击('19-c-3-'); hdrLab_点击('22'); hdrLab_点击(“22-a”); hdrLab_点击(“22-b”); hdrLab_点击('23'); hdrLab_点击(“24”); hdrLab_点击(“24-a”); hdrLab_点击(“24-b”); hdrLab_点击(“24-c”); hdrLab_点击('25'); hdrLab_点击('25-a-'); hdrLab_点击('144'); hdrLab_点击('144-a'); hdrLab_click('1728'); hdrLab_click('1728-a'); //警报(dta['checkedSubNodeCount--19-a']); } window.onload=init; 短数字“1”的测试: 短编号“1”子项的测试: 你喜欢哪种水果 苹果: 鲜红可口 史密斯奶奶 香蕉: 绿色的 黄色(成熟但不太成熟) 棕色(非常成熟) 果汁 橙汁 葡萄汁 番茄汁 你喜欢哪种果汁 苹果汁 橙汁 无子节点的单勾选问题 最佳操作系统 安卓 苹果 Linux 用子节点检查检查问题 子节点检查问题 测试3位数字: 3位数字子项的测试: 测试4位数字: 4位数字子项的测试: var ua=navigator.userAgent; 变量ieVersion=null; var ix=0; 对于(var v=7;v,c#,asp.net,C#,Asp.net,我会考虑将三个不同的项目投影到一个自引用列表中。每个项目都需要一个Id、描述和父Id。为此,我会创建一个视图模型 public class TreeItem { public int Id {get; set;} public string Description {get; set;} public int ParentId {get; set;} } 这将允许您利用webforms中的asp:TreeView,或者使用MVC时利用jQuery树/TreeView的任

我会考虑将三个不同的项目投影到一个自引用列表中。每个项目都需要一个Id、描述和父Id。为此,我会创建一个视图模型

public class TreeItem {
    public int Id {get; set;}
    public string Description {get; set;}
    public int ParentId {get; set;}
}

这将允许您利用webforms中的asp:TreeView,或者使用MVC时利用jQuery树/TreeView的任何风格。

您可以使用字典对象填充分层数据。此代码示例可能会有所帮助:

Dictionary<string, Dictionary<string, List<string>>> dictPage = new Dictionary<string, Dictionary<string, List<string>>>();

foreach (DataRow row in dt.Rows)
{
    string sPageID = row["PageName"].ToString();
    string sVersionID = row["VersionName"].ToString();
    string sElementID = row["ElementName"].ToString();

    if (!dictPage.ContainsKey(sPageID))
        dictPage.Add(sPageID, new Dictionary<string, List<string>>());

    if (!dictPage[sPageID].ContainsKey(sVersionID))
        dictPage[sPageID].Add(sVersionID, new List<string>());

    dictPage[sPageID][sVersionID].Add(sElementID);
}
在此过程中,您还可以应用CSS类、ID或简单JavaScript来添加折叠/扩展行为


请注意,我没有将此代码的性能与其他方法进行比较,因此我对此不太确定,但在一台普通机器上,在一次测试中,处理8000条记录需要8毫秒。

您使用实体框架吗?不,没有实体框架。您将检索到的数据存储在哪里?在dataset中?目前没有任何位置。我检索到它,并保持我的状态在SqlDataReader中。在这里,迭代它。这是webforms还是mvc?
Dictionary<string, Dictionary<string, List<string>>> dictPage = new Dictionary<string, Dictionary<string, List<string>>>();

foreach (DataRow row in dt.Rows)
{
    string sPageID = row["PageName"].ToString();
    string sVersionID = row["VersionName"].ToString();
    string sElementID = row["ElementName"].ToString();

    if (!dictPage.ContainsKey(sPageID))
        dictPage.Add(sPageID, new Dictionary<string, List<string>>());

    if (!dictPage[sPageID].ContainsKey(sVersionID))
        dictPage[sPageID].Add(sVersionID, new List<string>());

    dictPage[sPageID][sVersionID].Add(sElementID);
}
StringBuilder sbHtmlUL = new StringBuilder();

sbHtmlUL.Append("<ul>");

foreach (var page in dictPage)
{
    sbHtmlUL.Append("<li>");
    sbHtmlUL.Append(page.Key);

    sbHtmlUL.Append("<ul>");

    foreach (var version in page.Value)
    {
        sbHtmlUL.Append("<li>");
        sbHtmlUL.Append(version.Key);

        sbHtmlUL.Append("<ul>");

        foreach (var element in version.Value)
        {
            sbHtmlUL.Append("<li>");
            sbHtmlUL.Append(element);
            sbHtmlUL.Append("</li>");
        }

        sbHtmlUL.Append("</ul>");
        sbHtmlUL.Append("</li>");
    }

    sbHtmlUL.Append("</ul>");
    sbHtmlUL.Append("</li>");
}

sbHtmlUL.Append("</ul>");