C\#무한 연결 드 롭 다운 목록 상자 실현
트 리 구조의 표 가 있 을 수 있 습 니 다.ID,Name,ParentID,Level 등 필드 가 있 을 수 있 습 니 다.다음 에 실현 할 것 은 1 급 노드 부터 1 급 으로 열 을 내 고
드 롭 다운 목록 상자 의 형식 은 N 급 연동 과 같 습 니 다.
효과 그림:
두 문제:
1.작업 할 때의 연동 을 만 들 때 자동 바 인 딩 을 할 필요 가 없습니다.
2.작업 을 편집 할 때의 연락 운송 은 하위 노드 에 따라 한 단계 씩 부모 노드 에 연결 되 어야 합 니 다.
실현:
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\#같은 깊이 의 노드(동년배 노드)를 가 져 옵 니 다.
/// <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 페이지 액 션 관련:
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>
///
/// </summary>
public List<Category> Sons { get; set; }
/// <summary>
///
/// </summary>
public Category Parent { get; set; }
}
자,이제 우리 N 급 무한 드 롭 다운 목록 상자 가 완성 되 었 습 니 다.읽 어 주 셔 서 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.