最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年03月07日 17:00:24   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)無(wú)限級(jí)聯(lián)下拉列表框的相關(guān)資料,感興趣的小伙伴們可以參考一下

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

可能有一個(gè)樹(shù)型結(jié)構(gòu)的表,它可能有ID,Name,ParentID,Level等字段,下面要實(shí)現(xiàn)的就是從一級(jí)節(jié)點(diǎn)開(kāi)始,一級(jí)一級(jí)的列出來(lái),并以

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

效果圖:

兩個(gè)問(wèn)題:

1、建立操作時(shí)的聯(lián)動(dòng),它不需要進(jìn)行自動(dòng)綁定

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

實(shí)現(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=''>請(qǐng)選擇</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 樹(shù)型結(jié)構(gòu)相關(guān)
    /// <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">父對(duì)象</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#拼接下拉列表框相關(guān):

/// <summary>
    /// 遞歸得到它的所有祖宗以selectlist的形式進(jìn)行拼接
    /// </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é)點(diǎn)(同輩節(jié)點(diǎn))相關(guān):

/// <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頁(yè)面action相關(guān):

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();//修改時(shí),進(jìn)行綁定
      return View();
    }

MVC頁(yè)面代碼相關(guān):

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

C#樹(shù)型結(jié)構(gòu)實(shí)體類(lèi)相關(guān):

/// <summary>
  /// 樹(shù)型分類(lèi)結(jié)構(gòu)
  /// </summary>
  public class Category
  {
    /// <summary>
    /// 父ID
    /// </summary>
    public int ParentID { get; set; }
    /// <summary>
    /// 樹(shù)ID
    /// </summary>
    public int ID { get; set; }
    /// <summary>
    /// 樹(shù)名稱(chēng)
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 深度
    /// </summary>
    public int Level { get; set; }
    /// <summary>
    /// 子孫節(jié)點(diǎn)
    /// </summary>
    public List<Category> Sons { get; set; }
    /// <summary>
    /// 父節(jié)點(diǎn)
    /// </summary>
    public Category Parent { get; set; }
  }

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

相關(guān)文章

  • C#使用Npoi導(dǎo)出Excel并合并行列

    C#使用Npoi導(dǎo)出Excel并合并行列

    這篇文章主要為大家詳細(xì)介紹了C#使用Npoi導(dǎo)出Excel并合并行列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • CAD2008+VS2008開(kāi)發(fā)ObjectARX加載失敗問(wèn)題(推薦)

    CAD2008+VS2008開(kāi)發(fā)ObjectARX加載失敗問(wèn)題(推薦)

    這篇文章主要介紹了CAD2008+VS2008開(kāi)發(fā)ObjectARX加載失敗問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • .net實(shí)現(xiàn)裁剪網(wǎng)站上傳圖片的方法

    .net實(shí)現(xiàn)裁剪網(wǎng)站上傳圖片的方法

    這篇文章主要介紹了.net實(shí)現(xiàn)裁剪網(wǎng)站上傳圖片的方法,比較實(shí)用的功能,需要的朋友可以參考下
    2014-07-07
  • C# 解決在Dictionary中使用枚舉的效率問(wèn)題

    C# 解決在Dictionary中使用枚舉的效率問(wèn)題

    這篇文章主要介紹了C# 解決在Dictionary中使用枚舉的效率問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • C# Volatile的具體使用

    C# Volatile的具體使用

    本文主要介紹了C# Volatile的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C#中Hashtable與Dictionary的用法對(duì)比及選擇

    C#中Hashtable與Dictionary的用法對(duì)比及選擇

    這篇文章主要介紹了C#中Hashtable與Dictionary的用法對(duì)比及選擇方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • VS2019 找不到資產(chǎn)文件 “xxxx\obj\project.assets.json”運(yùn)行NuGet包還原以生成此文件(解決方案)

    VS2019 找不到資產(chǎn)文件 “xxxx\obj\project.assets.json”運(yùn)行NuGet包還原以生成此文

    這篇文章主要介紹了VS2019 找不到資產(chǎn)文件 “xxxx\obj\project.assets.json”運(yùn)行NuGet包還原以生成此文件,本文給大家分享解決方案,感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2020-08-08
  • C#讀寫(xiě)Excel的流程步驟

    C#讀寫(xiě)Excel的流程步驟

    這篇文章主要介紹了詳解C#讀寫(xiě)Excel的流程步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起來(lái)學(xué)習(xí)吧
    2023-12-12
  • C#中new關(guān)鍵字的三種用法

    C#中new關(guān)鍵字的三種用法

    在C#中,new關(guān)鍵字具有多種不同的用途,主要包括以下三個(gè):作為運(yùn)算符,作為修飾符,作為泛型約束,文章通過(guò)代碼示例將這三種用法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • C#獲取關(guān)鍵字附近文字算法實(shí)例

    C#獲取關(guān)鍵字附近文字算法實(shí)例

    這篇文章主要介紹了C#獲取關(guān)鍵字附近文字算法,實(shí)例分析了文字查找算法的原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

怀化市| 崇义县| 玉门市| 闸北区| 鲁山县| 镶黄旗| 咸宁市| 潢川县| 屏南县| 左贡县| 景谷| 永仁县| 永仁县| 盱眙县| 吉林省| 博野县| 遂宁市| 临沧市| 辽宁省| 宁都县| 柳江县| 巴林左旗| 潮州市| 江口县| 即墨市| 巴南区| 安国市| 巴彦县| 五大连池市| 营山县| 徐闻县| 秭归县| 康乐县| 定边县| 宁陕县| 合川市| 青海省| 堆龙德庆县| 都江堰市| 蒲江县| 九寨沟县|