2008-10-24 9 views
5

ASP.NET에서 내장 DropDownList를 서브 클래스 화하여 기능을 추가하고 내 페이지에서 사용할 수있게하려고합니다. 나는 이것을 UserControl과 함께 시도했지만 내부 DropDownList를 노출시키지 않는다는 것을 알았다. (논리적으로 생각해 보라). 나는 대답을 봤지만 아무것도 찾을 수 없습니다.ASP.NET의 DropDownList 서브 클래 싱

나는 실제 클래스를 작성하고 DropDownList에서 하위 클래스로 만들 수 있지만 ASP.NET 페이지에 파일을 등록 할 수 없으며 소스 뷰에서 사용할 수 없습니다. 어쩌면 수업 시간에 물건이 없어 졌을까요?

아이디어가 있으십니까?

+0

정말 연장해야합니까? 또는 DDL을 사용하여 사용자 정의 컨트롤을 만든 다음 사용자 이벤트 컨트롤에서 다양한 이벤트 (OnSelectedIndexChanged, OnDataBinding 등)를 연결하여 이러한 이벤트 중 하나가 발생할 때 자신의 기능을 추가 할 수 있습니까? 어떤 종류의 추가 기능을 추가하려고합니까? –

+0

내가 할 일은 항상 DDL에있는 첫 번째 값을 정의하는 InitialValue 속성을 추가하는 것뿐입니다. – deadtime

+0

DDL을 innerDropDownList 또는 다른 것으로 노출하는 것이 현명합니까? – deadtime

답변

15

DropDownList를 사용자 정의 컨트롤에서 확장하려면 ... 사용자 정의 컨트롤이 아닌.

MyLibrary라는 새 클래스 라이브러리 프로젝트를 만듭니다. 당신이 당신의 라이브러리를 컴파일하면

당신은 당신의 웹 애플리케이션에 대한 참조를 추가 할 수 클래스를 호출 MyDropDownList.cs

namespace My.Namespace.Controls 
{ 
[ToolboxData("<{0}:MyDropDownList runat=\"server\"></{0}:MyDropDownList>")] 
public class MyDropDownList: DropDownList 
{ 
    // your custom code goes here 
    // e.g. 
    protected override void RenderContents(HtmlTextWriter writer) 
    { 
     //Your own render code 
    } 
} 
} 

를 추가합니다.

그리고 당신의 Web.config에 tagprefix 당신은 댓글에서 내 영문/ASCX의

<my:MyDropDownList ID="myDDl" runat="server"> 
    ... 
</my:MyDropDownList> 
+1

+1 기본 ASP.NET 개체에서 해당 기능을 상속하는 사용자 지정 컨트롤을 만드는 방법에 대한 훌륭한 설명입니다. 매우 명확하고 간결합니다! – kdmurray

0

, 당신이 당신의 목표를 명확히이를 추가 할 수 있도록해야한다

<add tagPrefix="my" namespace="My.Namespace.Controls" assembly="MyLibrary" /> 

: "유일한을 내가하고 싶은 것은 항상 DDL에있는 첫 번째 값을 정의하는 InitialValue 속성을 추가하는 것입니다. "

특별한 사용자 컨트롤이나 사용자 지정 컨트롤을 만들어야한다고 생각하지 않습니다.

자주 웹 컨트롤에서이 코드를 사용하여 목록 컨트롤을 채 웁니다. 추가 ListItem이 목록의 맨 위에 추가되는지 여부와 해당 항목의 텍스트를 나타내는 부울 값을 전달합니다. 당신은 모든 DropDownList로는 "도시 선택"으로 초기 값 빈, 또는 텍스트로 갖고 싶어

public static void BindListControl (ListControl ctl, SqlDataReader dr, 
     String textColumn, String valueColumn, bool addBlankRow, string blankRowText) 
    { 
     ctl.Items.Clear(); 
     ctl.DataSource = dr; 
     ctl.DataTextField = textColumn; 
     ctl.DataValueField = valueColumn; 
     ctl.DataBind(); 

     if (addBlankRow == true) ctl.Items.Insert(0, blankRowText); 
    } 

이, 예를 들어, 유용합니다.