2010-04-30 3 views
3

저는 유지 관리하는 몇 가지 웹 응용 프로그램을 가지고 있으며 GridView를 데이터 소스에 바인딩하기 위해 동일한 코드 블록을 반복 작성하는 경우가 많습니다. 데이터 바인딩을 처리하는 일반 메서드를 만들려고하는데 Repeater 및 DataLists와 함께 작동하는 데 문제가 있습니다.일반 메서드를 통한 ASP.NET 컨트롤 바인딩

public void BindControl<T>(T control, SqlCommand sql) where T : System.Web.UI.WebControls.BaseDataBoundControl 
    { 
     cmd = sql; 
     cn.Open(); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     if (dr.HasRows) 
     { 
      control.DataSource = dr; 
      control.DataBind(); 
     } 
     dr.Close(); 
     cn.Close(); 
    } 

나는 단지의 호출에 "BindControls (myGridView, cmd를)"만드는 대신이 동일한 기본 블록을 다시 입력 내의 CommandText를 정의 할 수 있습니다 그 방법 : 여기

내가 지금까지 가지고있는 일반적인 방법이다 그리드를 바인딩해야 할 때마다 코드를 작성해야합니다.

문제는 리피터 또는 데이터 목록에서 작동하지 않는 문제입니다. 이러한 각 컨트롤은 서로 다른 클래스의 해당 "DataSource"및 "DataBind"메서드를 상속합니다. 다른 포럼의 누군가가 인터페이스를 구현할 것을 제안했지만 그 작업을 수행하는 방법을 잘 모르겠습니다.

GridView, Datalist 및 Repeater는 BaseDataBoundControl, BaseDataList 및 Repeater 클래스에서 각각의 "DataBind"메서드를 가져옵니다. 어떻게 하나의 인터페이스를 만들어 모두 묶어 둘까요? 아니면이 방법으로 3 오버로드를 사용하는 것이 나을까요?

  • 데이브

답변

0

내가 시도 할 것은 데이터 소스 속성을 설정 및 반사와 데이터 바인딩() 메소드를 실행하는 것입니다. 그리고 T 유형을 특정 유형에 연결하지 마십시오.

0

이전에도 해 보았습니다. 제안한 것처럼 3 가지 오버로드를 생성하는 것은 훌륭한 해결책입니다. 당신이 상상하고있는 것처럼 "Bindable"인터페이스를 생성하기에는 너무 늦었고, 객체가 설계 될 때 인터페이스를 구현해야합니다.