2014-05-13 4 views
0

내 ASP 그리드에서 몇 가지 열은 템플릿 필드이며 DataTable에서 바인딩하는 열은 거의 없습니다. 세트 Autogenearte = true. 따라서 전체 columns = 정적 열 + DataTable 열 . 행 생성 이벤트의 열을 재정렬합니다.그리드 내부에서 컨트롤의 열을 찾는 방법은 무엇입니까?

내 문제는 정적 열 중 일부입니다. 조건에 따라 일부 열을 비활성화해야합니다. 정적 템플릿 필드 안의 컨트롤의 열 번호를 식별해야합니다. 그래서 내가 설정할 수 있습니다 e.Row.Cells [7] .CssClass = "hiddencol"; 는하지만 어떻게 내가

int colNo=0; 
for(int count=0;count<e.Row.Cells.count;count++) 
{ 
    Button btn=(Button) e.Row.Cells[Count].FindControl("txtCol"); 
    if(btn!=null) 
    colNo=count; 
} 

을 시도 열없이

을 얻을 수 있습니다하지만 난 어떤 열을 받고 있지 않다. 모든 열에 만족합니다.

+0

뒤에 그것은 자바 스크립트와 CSS를 제어하는 ​​것이 가장 좋습니다. –

+0

@LIUFA이 경우 셀을 숨겨야하는지 여부를 결정하는 정보가 서버에있을 수 있습니다. 페이지가로드 된 후에 코드를 실행하는 것과는 대조적으로 마크 업을 브라우저에 보내는 것이 더 효율적입니다. –

답변

0

귀하의 의도를 이해하는 경우 다음과 같이 처리하십시오. 그것은 내 테스트를 위해 일했습니다.

그리드

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"> 
    <Columns> 

     <asp:TemplateField HeaderText="Static Col 1"></asp:TemplateField> 
     <asp:TemplateField HeaderText="Static Col 2" > 
      <ItemTemplate> 
       <asp:Button runat="server" ID="btnTest" Text="Hide Me"/> 

      </ItemTemplate> 

     </asp:TemplateField> 

    </Columns> 
</asp:GridView> 

코드

protected void Page_Load(object sender, EventArgs e) 
    { 
     GridView1.DataSource = GetData(); 
     GridView1.DataBind(); 
    } 



    private DataTable GetData() 
    { 
     // get some data and return it 
    } 

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      if (HideCell(e.Row.RowIndex)) 
      { 
       var cell = e.Row.Cells.Cast<TableCell>().FirstOrDefault(c => c.FindControl("btnTest") != null); 
       if (cell != null) 
       { 
        cell.CssClass = "hidden"; 
       } 
      } 
     } 
    } 

    private bool HideCell(int rowNum) 
    { 
     return rowNum%2 == 0; 
    } 
관련 문제