雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

C#實現(xiàn)無限級聯(lián)下拉列表框

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊:

本文實例為大家分享了無限級聯(lián)下拉列表框的的實現(xiàn)方法,具體內容如下

可能有一個樹型結構的表,它可能有ID,Name,ParentID,Level等字段,下面要實現(xiàn)的就是從一級節(jié)點開始,一級一級的列出來,并以

下拉列表框的形式體現(xiàn)出來,就像是N級聯(lián)動。

效果圖:

兩個問題:

1、建立操作時的聯(lián)動,它不需要進行自動綁定

2、編輯操作時的聯(lián)運,它需要根據子節(jié)點,逐級自己綁定到父節(jié)點,直到根

實現(xiàn):

JS代碼

<script type="text/javascript">
  function areaOnSelect(obj) {
    var res = '';
    $.ajax({ url: '@Url.Action("GetSubTree")',
      type: 'GET',
      data: { parentId: obj.value },
      success: function (msg) {
        $(obj).nextAll().remove();
        res = "<select name='Sub' onchange='areaOnSelect(this)'>";
        res += "<option value=''>請選擇</option>";
        $.each(msg, function (i, item) {
          res += "<option value='" + item["ID"] + "'>" + item["Name"] + "</option>";
        });
        res += "</select>";
        if ($(res).find("option").size() > 1)
          $(obj).after(res);
      }
    });
  }
</script>

C#代碼:

#region 樹型結構相關
    /// <summary>
    /// 遞歸找老祖宗
    /// </summary>
    /// <param name="father"></param>
    void GetFather(SubItem father)
    {
      if (father != null)
      {
        father.Parent = _subList.FirstOrDefault(i => i.ID == father.ParentID);
        GetFather(father.Parent);
      }
    }

    /// <summary>
    /// 弟妹找子孫
    /// </summary>
    /// <param name="father">父對象</param>
    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#拼接下拉列表框相關:

/// <summary>
    /// 遞歸得到它的所有祖宗以selectlist的形式進行拼接
    /// </summary>
    /// <param name="son"></param>
    /// <param name="sbr"></param>
    void getSelectList(SubItem son, StringBuilder sbr)
    {
      StringBuilder inSbr = new StringBuilder();
      if (son != null)
      {
        if (son.ParentID == 0)
          inSbr.Append("<select name='Parent' onchange = 'areaOnSelect(this)' >");
        else
          inSbr.Append("<select name='Sub'>");
        GetCommon_CategoryByLevel(son.Level).ToList().ForEach(i =>
        {
          if (i.ID == son.ID)
            inSbr.Append("<option value='" + i.ID + "' selected='true'>" + i.Name + "</option>");
          else
            inSbr.Append("<option value='" + i.ID + "'>" + i.Name + "</option>");
        });

        inSbr.Append("</select>");
        sbr.Insert(0, inSbr);
        getSelectList(son.Parent, sbr);
      }
    }

C#得到同一深度的節(jié)點(同輩節(jié)點)相關:

/// <summary>
    /// 得到指定深度的列表
    /// </summary>
    /// <param name="level"></param>
    /// <returns></returns>
    public List<SubItem> 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#樹型結構實體類相關:

/// <summary>
  /// 樹型分類結構
  /// </summary>
  public class Category
  {
    /// <summary>
    /// 父ID
    /// </summary>
    public int ParentID { get; set; }
    /// <summary>
    /// 樹ID
    /// </summary>
    public int ID { get; set; }
    /// <summary>
    /// 樹名稱
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 深度
    /// </summary>
    public int Level { get; set; }
    /// <summary>
    /// 子孫節(jié)點
    /// </summary>
    public List<Category> Sons { get; set; }
    /// <summary>
    /// 父節(jié)點
    /// </summary>
    public Category Parent { get; set; }
  }

好了,現(xiàn)在我們的N級無限下拉列表框就做好了,感謝大家的閱讀。

上一篇:C# WCF簡單入門圖文教程(VS2010版)

欄    目:C#教程

下一篇:C#簡單郵件群發(fā)通用類

本文標題:C#實現(xiàn)無限級聯(lián)下拉列表框

本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6642.html

網頁制作CMS教程網絡編程軟件編程腳本語言數據庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網 版權所有