2013-07-04 5 views
1

여러 디렉터리에서 디렉터리 목록을 가져 와서 gridview에 넣으려고합니다. 지금까지 그렇게 좋았습니다. 심지어는 쿼리 문자열을 기반으로 폴더 이름을 다시 가져 오는 searchPattern도 포함 시켰습니다. 그러나 시도하고 GridView에서 하이퍼 링크로 폴더 경로를 설정하면 오른쪽 열 이름을 가져올 수없는 및 반환합니다 거짓말 : "DataBinding : 'System.String'이름 가진 속성을 포함하지 않습니다 ' FullName '. " 내가 도대체 ​​뭘 잘못하고있는 겁니까? "FullName"이라고하지 않은 폴더 경로입니까?바운드 하이퍼 링크가있는 GridView의 디렉터리 .GetDirector

여기 내 코드의 어떤 도움을 주시면 감사 : 코드 뒤에 (VB.NET)를

Dim paths As String = "\\xx\PROJECTS\OilGas\;\\xx\PROJECTS\Utils\;\\xx\PROJECTS\Rail\RAIL PROJECTS\PROJECTS - ACTIVE\" 
    Dim pathList As String() = paths.Split(";") 

    Dim files = New List(Of String)() 

    Dim search As String = "*" + qs.Text 
    Dim ext As String = "*" 

    Dim searchPattern As [String] = [String].Format("{0}*{1}", search, ext) 

    For Each str As String In pathList 
     Dim d As New DirectoryInfo(str) 
     files.AddRange(Directory.GetDirectories(d.FullName, searchPattern)) 

     GridView1.DataSource = files 
     GridView1.DataBind() 
    Next  

Griview 코드 :

<asp:GridView ShowHeader="True" ID="GridView1" runat="server" BorderStyle="None" GridLines="None"> 
<Columns> 
     <asp:TemplateField > 
      <ItemTemplate>     
       <asp:HyperLink ID="HyperLink1" NavigateUrl='' Target="_blank" Text='<%#Eval("FullName")%>' runat="server"></asp:HyperLink> 
      </ItemTemplate> 
      </asp:TemplateField> 
      </Columns> 
    <EmptyDataTemplate> 
     <em><strong><span style="color: #ff0033">Invalid project code or no project folder found 
      with that project code.</span></strong></em> 
    </EmptyDataTemplate> 
</asp:GridView> 

친절 감사, 제임스.

답변

0

GridView의 데이터 소스는 문자열 목록 (폴더 경로 포함)입니다.

사용자의 바운드 하이퍼 링크에 DataSource의 모든 항목에 대해 파일 FullName 속성을 검색하도록 요청하는 Eval 명령이 포함되어 있습니다. 목록 인 귀하의 데이터 소스, 그것은 그런 식으로 번역 될 수있다 : 문자열 클래스는 어떤하면 FullName 속성을 가지고 있지 않습니다

foreach(string path in files) 
{ 
    HyperLink1.NavigateUrl = path.FullName; 
} 

지금 잘하면 문제를하기 시작하고 있습니다.

<%# Container.DataItem %> 

것은 당신이

을 입력 된 변수 캐스트 할 수도 있음을 어느 :에 의해 (이 반사를 수행하고 매우 효율적되지 않기 때문에, 어쨌든 나쁜 솔루션입니다)

해결책은 평가를 대체하는 것입니다

그래서 당신은이를 작성할 수

<%# (string)Container.DataItem %> 

편집 : 죄송합니다, 나는 C#으로 코드를 작성, 나는 (당신이 이해 바랍니다 및 그 솔루션은 VB에서 작동합니다!)

+0

완벽하게, 당신은 그것을 훌륭하게 설명했고 그것은 작동합니다! 많은 트라 야누스 감사합니다! 내가 이것을 썼을 때 "어쩌면 문자열 목록에 열 이름이 없다"라고 생각하기 시작 했으므로 거기에 도착했습니다. – Stoy

+0

다행입니다. Container.DataItem을 생각해보십시오. 언젠가 복합 객체 목록에서 gridview를 바인딩하면 Eval 메서드가 반영되지 않습니다. – Trajan