2014-07-26 2 views
1

안녕하세요 저는 Gridview를 사용 중이며 요소의 표시 속성을 변경해야합니다. 바인딩하는 동안 모든 행에서 해당 속성을 변경해야합니다.리피터처럼 GridView를 실행하는 방법은 무엇입니까?

코드 숨김으로 변경하려고 시도했지만 첫 번째 레코드의 요소 속성 만 변경되었습니다.

요소는 Panel, 이며 모든 레코드를 변경해야하는 속성은 다음과 같습니다. Visible 속성

바인딩하는 동안 모든 Panel 요소의 Visible 속성을 변경하려면 Repeater처럼 GridView를 어떻게 실행할 수 있습니까?

ASPX :

내 코드는 다음과 같다

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
       GridLines="None" DataKeyNames="ID" 
       AllowPaging="True" OnDataBinding="GridView1_DataBinding">      
    <Columns>  
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:Panel ID="Panel1" runat="server" Visible="false"> 
        <!-- code ... --> 
       </asp:Panel> 
       <asp:Panel ID="Panel2" runat="server" Visible="false"> 
        <!-- code ... --> 
       </asp:Panel> 
      </ItemTemplate>        
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

CS :

private void Method1(string Key) 
{ 
    if (Key==1) 
    { 
     Panel Panel1 = GridView1.Controls[0].Controls[1].FindControl("Panel1") as Panel; 
     Panel1.Visible = true; 
    } 
    else 
    { 
     Panel Panel2 = GridView1.Controls[0].Controls[1].FindControl("Panel2") as Panel; 
     Panel2.Visible = true; 
    } 
} 
protected void GridView1_DataBinding(object sender, EventArgs e) 
{ 
    Method1(1); 
} 
+0

사실, ... 그래 흠, 내가 그것을 쓸 것, 취급을 부탁드립니다 쿼리 문자열에 1 개 또는 2 값에 jQuery를 사용하는 것이 좋을 것이다, 그리고 나는 숨기거나 패널을 볼 수 있습니다 . –

답변

1

문제는 당신이 OnDataBinding 이벤트를 사용하는 것입니다. 이는 GridView에 데이터가 바인딩 된 경우에만 한 번 발생합니다. 필요한 것은 OnRowDataBound 이벤트입니다. 이것은 행당 한 번 트리거됩니다.

OnRowDataBound="GridView1_RowDataBound" 

그런 다음 코드에서 처리하여 각 행의 패널을 찾습니다.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Panel Panel1 = (Panel)e.Row.FindControl("Panel1"); 
     //So on and so forth... 
    } 
} 
+0

감사합니다. –

관련 문제