2012-04-20 3 views
0

여기에 약간의 복잡함이 있습니다. GridView에서 파일의 크기, 생성 날짜 및 수정 한 날짜 등을 나열하는 코드가 있습니다. 'FileName'열에 HyperLink를 추가하고 싶지만이 작업을 수행 할 방법을 찾을 수 없습니다.ASP.NET VB가 GridView에 HyperLink를 추가했습니다.

코드 뒤에 전체 GridView를 빌드합니다.

Sub BindGrid(path) 
    'Create GridView headings and add titles' 
    Dim dt As New DataTable 
    Dim Name As New HyperLinkField 

    dt.Columns.Add("FileName") 
    dt.Columns.Add("Size") 
    dt.Columns.Add("Last Accessed") 
    dt.Columns.Add("Created Date") 


    Dim Username = User.Identity.Name.ToString 
    Dim TrimUsername = Username.Replace("ASHDOWN\", "") 
    'Dim Path As String = "~\\Users\\" & TrimUsername'' 
    LoginNameDisplay.Text = TrimUsername 

    Dim di As New IO.DirectoryInfo(Server.MapPath(Path)) 
    Try 
     Dim diar1 As IO.FileInfo() = di.GetFiles() 
     Dim dra As IO.FileInfo 

     'list the names of all files in the specified directory' 
     For Each dra In diar1 

      dt.Rows.Add(New Object() {dra.Name, dra.Length & " KB", dra.LastAccessTime, dra.CreationTime}) 
     Next 
     GridView1.DataSource = dt 
     GridView1.DataBind() 
    Catch ex As Exception 

    End Try 




End Sub 

여기 내 ASPX 페이지 코드

<asp:GridView ID="GridView1" Width="100%" runat="server" CellPadding="4" 
     EnableModelValidation="True" ForeColor="#333333" GridLines="None"> 
     <AlternatingRowStyle BackColor="White" /> 
       <Columns> 
        <asp:HyperLinkField AccessibleHeaderText="Hyperlink" /> 
       </Columns> 
     <EditRowStyle BackColor="#2461BF" /> 
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#EFF3FB" /> 
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
    </asp:GridView> 

이 가진 모든 도움말이 우수 할 것입니다.

답변

1

사용하는 대신 TemplateField :

protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRow row = ((DataRowView)e.Row.DataItem).Row; 
     HyperLink hlFile = (HyperLink)e.Row.FindControl("HlFile"); 
     // set the hyperlink url just as you please 
     hlFile.NavigateUrl = row.Field<String>("URL"); 
    } 
} 

편집 :이 영문 너무 복잡 경우

<asp:TemplateField> 
<ItemTemplate> 
    <asp:HyperLink ID="HlFile" runat="server" 
     Text='<%# Eval("FileName") %>'> 
    </asp:HyperLink> 
</ItemTemplate> 
</asp:TemplateField> 

당신은 RowDataBound에서 NavigateUrl을 설정할 수 있습니다

Protected Sub GridView1_RowDataBound(sender As [Object], e As GridViewRowEventArgs) 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim row As DataRow = DirectCast(e.Row.DataItem, DataRowView).Row 
     Dim hlFile = DirectCast(e.Row.FindControl("HlFile"), HyperLink) 
     ' set the hyperlink url just as you please 
     hlFile.NavigateUrl = row.Field(Of String)("URL") 
    End If 
End Sub 
다음은 VB 버전의
+0

. 정보는 IO.FileInfo에서 가져옵니다. – user1345931

+0

@ user1345931 : 제안 된대로 RowDataBound를 처리하고 코드 숨김에서 Text 및 NavigateUrl을 설정합니다. 어떤 일이 발생하는지 디버그하십시오 (DataRow 필드 검사). 'BindGrid '라고 불리는 곳에서 anbd가 왔을 때? –

+0

가 좋아 나는 다시 시도하고 난 다음 코드가 하위 GridView1_RowData (개체로 ByVal의 보낸 사람, GridViewRowEventArgs으로 ByVal의 전자) 만약 e.Row.RowType = DataControlRowType.DataRow 그런 HlFile.FindControl ("HlFile") HlFile.NavigateUrl = e.Row.Cells (1) .Text 끝 부분 End Sub – user1345931

0

HyperLinkField의 NavigateUrl 속성을 대상 URL로 설정하십시오.

참조 : 아래의 유사 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hyperlinkfield.navigateurl.aspx#Y228

당신은 DataNavigateUrlFormatString를 사용하여 속성을 설정할 수 있습니다, 뭔가 : <% 평가 ("파일 이름")가 존재하지 않는 나는이되지만를 시도

HyperLinkField hlf = YourGridView.Columns["hyperlinkColumnName"] as HyperLinkField; 
hlf.DataNavigateUrlFormatString = "~\details.aspx?ProductID={0}"; 
관련 문제