栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#实现无限级联下拉列表框

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#实现无限级联下拉列表框

本文实例为大家分享了无限级联下拉列表框的的实现方法,具体内容如下

可能有一个树型结构的表,它可能有ID,Name,ParentID,Level等字段,下面要实现的就是从一级节点开始,一级一级的列出来,并以

下拉列表框的形式体现出来,就像是N级联动。

效果图:

两个问题:

1、建立操作时的联动,它不需要进行自动绑定

2、编辑操作时的联运,它需要根据子节点,逐级自己绑定到父节点,直到根

实现:

JS代码



C#代码:

#region 树型结构相关
    /// 
    /// 递归找老祖宗
    /// 
    /// 
    void GetFather(SubItem father)
    {
      if (father != null)
      {
 father.Parent = _subList.FirstOrDefault(i => i.ID == father.ParentID);
 GetFather(father.Parent);
      }
    }

    /// 
    /// 弟妹找子孙
    /// 
    /// 父对象
    void getSons(SubItem father)
    {
      if (father != null)
      {
 father.Sons = _subList.Where(item =>
   item.ParentID.Equals(father.ID)).ToList();
 father.Sons.ForEach(item =>
 {
   item.Parent = father;
   getSons(item);
 });
      }
    }


    #endregion

C#拼接下拉列表框相关:

/// 
    /// 递归得到它的所有祖宗以selectlist的形式进行拼接
    /// 
    /// 
    /// 
    void getSelectList(SubItem son, StringBuilder sbr)
    {
      StringBuilder inSbr = new StringBuilder();
      if (son != null)
      {
 if (son.ParentID == 0)
   inSbr.Append("");
 GetCommon_CategoryByLevel(son.Level).ToList().ForEach(i =>
 {
   if (i.ID == son.ID)
     inSbr.Append("");
   else
     inSbr.Append("");
 });

 inSbr.Append("");
 sbr.Insert(0, inSbr);
 getSelectList(son.Parent, sbr);
      }
    }

C#得到同一深度的节点(同辈节点)相关:

/// 
    /// 得到指定深度的列表
    /// 
    /// 
    /// 
    public List GetCommon_CategoryByLevel(int level)
    {
      var linq = from data1 in _subList
     join data2 in _subList on data1.ParentID equals data2.ID into list
     select new SubItem
     {
ID = data1.ID,
Level = data1.Level,
Name = data1.Name,
Parent = list.FirstOrDefault(),
ParentID = data1.ParentID,
     };
      return linq.Where(i => i.Level.Equals(level)).ToList();
    }

MVC页面action相关:

public ActionResult Category(int? id)
    {
      ViewData["Parent"] = new SelectList(_subList.Where(i => i.ID == (id ?? 0)), "ID", "Name", id ?? 1);
      SubItem current = _subList.FirstOrDefault(i => i.ID == (id ?? 1));
      GetFather(current);
      StringBuilder sbr = new StringBuilder();
      getSelectList(current, sbr);
      ViewData["edit"] = sbr.ToString();//修改时,进行绑定
      return View();
    }

MVC页面代码相关:

 @Html.Raw(ViewData["edit"].ToString())

C#树型结构实体类相关:

/// 
  /// 树型分类结构
  /// 
  public class Category
  {
    /// 
    /// 父ID
    /// 
    public int ParentID { get; set; }
    /// 
    /// 树ID
    /// 
    public int ID { get; set; }
    /// 
    /// 树名称
    /// 
    public string Name { get; set; }
    /// 
    /// 深度
    /// 
    public int Level { get; set; }
    /// 
    /// 子孙节点
    /// 
    public List Sons { get; set; }
    /// 
    /// 父节点
    /// 
    public Category Parent { get; set; }
  }

好了,现在我们的N级无限下拉列表框就做好了,感谢大家的阅读。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/124387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号