2010-02-16 6 views
1

내가 가진 조작 : 나는 DB에서 특정 필드의 값을 조회 할는 프로그래밍 방식의 GridView 열을 액세스하고의 GridView를

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" GridLines="None" 
       HorizontalAlign="Left" AutoGenerateColumns="False" 
       DataSourceID="SqlDataSource1" onrowcommand="GridView1_RowCommand1">    
       <HeaderStyle HorizontalAlign="Left" />        
       <Columns> 
        <asp:TemplateField HeaderStyle-Width="150"> 
         <HeaderTemplate> 
          <b>Downloads</b> 
         </HeaderTemplate> 
         <ItemTemplate> 
          <!-- <asp:HyperLink ID="hyperlinkDownload" runat="server" NavigateUrl="" >Download 
          MP3</asp:HyperLink> --> 
          <asp:LinkButton CommandName="download" 
          CommandArgument='<%# Eval("Name") %>' runat="server">Download MP3</asp:LinkButton> 
         </ItemTemplate> 
        </asp:TemplateField>  

</asp:GridView> 

하고 사실 경우에 LinkButton를 표시합니다. false 인 경우 linkButton을 표시하지 않습니다.

GridView에 프로그래밍 방식으로 액세스하여 열의 특정 부분을 보거나 항목을 조작 할 수있는 방법이 있습니까?

help.

답변

2

RowDataBound 이벤트에 처리기를 추가하여이 작업을 수행 할 수 있습니다. , 마크 업에서

protected void myGrid_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    var data = e.Row.DataItem as DataRowView; 
    if (data != null) 
    { 
     var lbtDownload = e.Row.FindControl("lbtDownload"); 
     lbtDownload.Visible = (bool) data.Row["HasFileForDownload"]; 
    } 
} 

그리드에 이벤트 핸들러를 첨부 : 뒤에 코드에서이이 라인을 따라 이벤트 처리기를 추가 당신은 또한에 id를 할당해야합니다

<asp:GridView OnRowDataBound="myGrid_RowDataBound" ...> 

LinkButton, 이벤트 핸들러에서 FindControl() 메소드를 사용하여 검색하는 것과 일치합니다.

면책 조항 : 현재이 문제를 테스트 할 기회가없는 Linux 컴퓨터입니다. 코드의 버그를보고하십시오. 편집 권한이 있으면 수정하십시오.

+0

머리글과 바닥 글이 같은 방법으로 호출되기 때문에 작동하지 않습니다. if (e.Row.RowType == DataControlRowType.DataRow) – citronas

+1

나는 개인적으로 잘 작동하는 것처럼 보이는'if (data! = null)'접근법을 선호한다. –

+0

글쎄, 이제 당신의 해결책을 이해합니다. 나는 당신이 '개인적 취향'이라는 용어를 사용했기 때문에 더 이상 논의하지 않을 것이다.) – citronas

2

예 있습니다.

1) RowDataBound 이벤트를 구독해야합니다.
2) LinkButton에 ID를 지정하십시오. 이는있는 DataItem 접근과 함께 일하는 LinqDataSource 생각으로 시작되지 않으면
3))

protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e) 
    { 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     LinkButton _bt = e.Row.FindControl("ID") as LinkButton; 
     if(_bt != null) 
     { 
     // have a look at the e.row.DataItem and try to get the value of your desired visibility property 
     _bt.Visible = true; 
     } 
    } 
    } 

4 숨김

에 삽입합니다.

관련 문제