Asp.net 사용자 정의 컨트롤 의 단일 선택,다 중 선택 컨트롤

본 논문 의 사례 는 Asp.net 단일 선택,체크 상자 컨트롤 의 구체 적 인 실현 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
자주 사용 하 는 jquery 플러그 인 을 컨트롤 로 패키지 하 는 것 도 좋 은 선택 입 니 다.
먼저 효과 보기:

1.라 이브 러 리 항목 을 새로 만 들 고 데이터 원본 클래스 를 만 듭 니 다.

 [Serializable]
 public class Select2Item
 {
 public bool Selected { get; set; }

 public string Text { get; set; }

 public string Value { get; set; }

 public Select2Item() { }

 public Select2Item(string text, string value)
 {
  this.Text = text;
  this.Value = value;
 }

 public Select2Item(string text, string value, bool selected)
 {
  this.Text = text;
  this.Value = value;
  this.Selected = selected;
 }
 } 

2.컨트롤 클래스 CheckList 를 만 들 고 WebControl 을 계승 하 며 Public ListItems 데이터 항목 속성 을 정의 합 니 다.
3.스 크 립 트 파일 및 스타일 파일 도입 
a.스 크 립 트 나 스타일 파일 을 만 들 고 파일 의 속성 을 설정 합 니 다.-생 성 작업-끼 워 넣 은 자원
  
b.namespace 에 태그[assembly:WebResource("네 임 스페이스.폴 더 이름.파일 이름","mime 형식")를 추가 해 야 합 니 다.]
예:
    [assembly: WebResource("Control.Style.checklist.css", "text/css",PerformSubstitution = true)]
    [assembly: WebResource("Control.Scripts.checklist.js", "application/x-javascript")] 
 css 파일 에 그림 이 존재 한다 면 그림 을 끼 워 넣 은 자원 으로 설정 합 니 다.css 에 서 는<%=WebResource("네 임 스페이스.폴 더 이름.파일 이름")%> 
 PerformSubstitution 은 삽입 식 자원 의 처리 과정 에서 다른 웹 자원 URL 을 분석 하고 이 자원 의 전체 경 로 를 대체 할 지 여 부 를 나타 낸다.
c.protected override void OnPreRender(EventArgs e)를 다시 쓰 고 끼 워 넣 은 스 크 립 트 나 스타일 파일 을 도입 합 니 다.
 if(Page!=null)Page.Header.Control.Add(LiteralControl),탭 을 LiteralControl 에 넣 고 LiteralControl 을 Page.Header 에 추가 하면 마지막 으로 페이지 에 도 입 된탭 을 볼 수 있 습 니 다.

 protected override void OnPreRender(EventArgs e)
 {
  if (this.Page != null)
  {
  StringBuilder sbb = new StringBuilder();
  sbb.Append(string.Format(STYLE_TEMPLATE, Page.ClientScript.GetWebResourceUrl(this.GetType(), "HandControl.Style.checklist.css")));
  sbb.Append(string.Format(SCRIPT_TEMPLATE, Page.ClientScript.GetWebResourceUrl(this.GetType(), "HandControl.Scripts.checklist.js")));

  bool hascss = false;
  LiteralControl lcc = new LiteralControl(sbb.ToString());
  lcc.ID = "lccheck";
  foreach (Control item in Page.Header.Controls)
  {
   if (item.ID == "lccheck")
   hascss = true;
  }
  if (!hascss)
   Page.Header.Controls.Add(lcc);
  }
  base.OnPreRender(e);
 } 

4.컨트롤 을 다시 쓰 는 proctected override void Render(HtmlTextWriter writer)방법
여 기 는 주로 렌 더 링 컨트롤 의 html 입 니 다.컨트롤 에 따라 결 정 됩 니 다. 

 protected override void Render(HtmlTextWriter writer)
 {
  if (Items.Count > 0)
  {
  writer.Write("<div id='div" + this.ClientID + "' class='c01-tag-div' mul='" + (Multiple == true ? "1" : "0") + "'>");
  if (Multiple == false)
   writer.Write("<input name='tb" + this.ClientID + "' type='hidden' value='" + Items[0].Value + "' />");
  else
   writer.Write("<input name='tb" + this.ClientID + "' type='hidden' />");
  bool first = true;
  foreach (var item in Items)
  {
   if (Multiple == false)
   {
   if (item.Selected && first)
   {
    writer.Write("<a title='" + item.Text + "' class='c01-tag-item c01-tag-select' val='" + item.Value + "' tag='Y'>" + item.Text + "</a>");
    first = false;
   }
   else
   {
    writer.Write("<a title='" + item.Text + "' class='c01-tag-item' val='" + item.Value + "' tag='N'>" + item.Text + "</a>");
   }
   }
   else
   {
   if (item.Selected)
    writer.Write("<a title='" + item.Text + "' class='c01-tag-item c01-tag-select' val='" + item.Value + "' tag='Y'>" + item.Text + "</a>");
   else
    writer.Write("<a title='" + item.Text + "' class='c01-tag-item' val='" + item.Value + "' tag='N'>" + item.Text + "</a>");
   }
  }
  writer.Write("</div>");
  }
 } 
5.GetSelected 방법 을 추가 하고 List을 되 돌려 주 며 GetSelectValue 를 추가 하고 String 을 되 돌려 줍 니 다(다 중 선택,번호 분리)       

 public List<Select2Item> GetSelected()
 {
  if (Page != null)
  {
  var values = Page.Request.Form["tb" + this.ClientID].Split(',');
  var res = Items.Where(t => values.Contains(t.Value)).ToList();
  foreach (var item in Items)
  {
   if (res.Contains(item))
   {
   item.Selected = true;
   }
   else
   {
   item.Selected = false;
   }
  }
  return res;
  }
  else
  {
  return null;
  }
 } 

 public string GetSelectValue()
 {
  if (Page != null)
  {
  return Page.Request.Form["tb" + this.ClientID];
  }
  return "";
 } 
6.저장 상태
 proctected override object SaveView State(),proctected override void LoadView State(object saved State)를 다시 써 야 합 니 다.Items 데이터 항목 속성 을 ViewState 에 저장 하 는 데 목적 을 둡 니 다. 

 protected override object SaveViewState()
 {
  var valuestr = Page.Request.Form["tb" + this.ClientID];
  if (!string.IsNullOrEmpty(valuestr))
  {
  var values = valuestr.Split(',');
  var temp = Items.Where(t => values.Contains(t.Value)).ToList();
  foreach (var item in temp)
  {
   item.Selected = true;
  }
  }
  return new object[] { base.SaveViewState(), Items };
 }

 protected override void LoadViewState(object savedState)
 {
  object[] vState = (object[])savedState;
  if (vState[0] != null)
  base.LoadViewState(vState[0]);
  if (vState[1] != null)
  Items = (List<Select2Item>)vState[1];
 } 

7.단선 과 복선 설정,js 에서 제어
 속성 추가 
[설명("가 져 오기 및 설정 다 중 선택"),DefaultValue(true),Browsable(true),Category("잡다 한 항목")]
public bool Multiple { get; set; }
 OnPreRender 코드 에서 Multiple 속성 이 div 의 mul 속성 값 에 영향 을 미 치 는 것 을 발견 하여 다 중 선택 여 부 를 판단 합 니 다(기본 다 중 선택)
 8.기타 설명
private static readonly string STYLE_TEMPLATE = "\r";
 private static readonly string SCRIPT_TEMPLATE = "\r";
효과 그림:

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기