2010-12-31 3 views
3

나는 사용자 정의 gridview.my 그리드가 정렬 및 사용자 정의 (프로그래머와 같은 등의 오버로드 방법없이 헤더에서 1 클릭만으로 각 열을 정렬 할 수 있습니다.) (나는 이것을 성공적으로 잘 수행한다.) 사용자 (프로그래머)는 아마도 grid.such의 각 열을 템플릿 필드, hyperlinkfield, boundfield ...로 추가한다. 정렬을 위해 , 나는 열의 datafield에 액세스해야합니다.사용자 정의 Id를 사용하여 Templatefield Gridview에서 액세스 제어하는 ​​방법

for (int j = 0; j < this.Columns.Count; j++) 
       { 
        BoundField bf; 
        bf = this.Columns[j] as BoundField; 
         if (bf != null) 
         { 
          string ht = bf.HeaderText; 
          string df = bf.DataField; 
         } 
       } 

을하지만 ColumnBound로 templateField.such 제어에 액세스 할 수 제가 ... 샘플 데이터 필드 및 헤더 텍스트 및 접근이 가능하여 code.i boundfield 열에 접근 할 수있다. 샘플 :

<asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label> 

내가 액세스 "이름"원하는 (바인딩 ("이름") 또는 평가 ("이름")). 어떻게 할 수 있습니까? 요점이 있습니다. 템플릿 필드의 ID (이 경우 "Label1")는 무엇입니까? 특별한 감사

답변

1

템플릿 필드 정렬은 가능하지 않을 수 있습니다. 템플릿 필드가 여러 데이터 필드로 묶여 있고 올바른 정렬 필드를 결정하는 것이 어렵습니다. 당신은 만 템플릿 필드로 일부 제약 뷰를 가지고가는 경우에

라벨 및/또는 앵커가 일부 데이터 필드에 바인딩되는 경우 다음 방법은 열 템플릿 필드의 경우

  1. 참조 할 것 (var tf = this.Columns[j] as TemplateField를) 정렬 할 수 있습니다 네, 템플릿을 경우
  2. 다음 데이터 바인딩 식에 대한 text 속성을 검사하면 (앵커 또는 말) 레이블을 발견하면, 템플릿의 자식 컨트롤을 통해
  3. 으로 반복 재귀 (ItemTemplate 속성을 사용)하고 데이터를 얻을 수 들.

그러나이 방법은 템플릿의 경우 <img src="Some Icon" /><span><%# Eval("Name") %></span>과 같이 실패합니다.

위의 기술의 또 다른 변형은 필드의 항목 템플릿을 가져온 다음 Render 메서드를 호출하여 템플릿 html을 가져온 다음 데이터 바인딩 식을 검색 한 다음 데이터 필드를 결정하는 것입니다. 그러나이 방법은 자체 함정이 있습니다. 예를 들어, <img src='<%# Eval("IconType") %>' /><span><%# Eval("Name") %></span>과 같은 템플릿을 사용하면 IconType 필드 대신 대신 필드를 정렬 할 수 있습니다.

IMO,보다 강력한 접근 방식은 템플릿 열에 대한 정렬 필드 (있는 경우)를 허용 할 gridview 컨트롤에 속성/메서드를 갖는 것입니다.

+0

예. 유용한 게시물에 감사드립니다. –