2013-07-04 1 views
1

Я пытаюсь получить список каталогов из нескольких каталогов и поместить их в gridview. Пока что так хорошо, я даже включил searchPattern, чтобы вернуть имена папок на основе запроса. Однако моя проблема заключается в том, что когда я пытаюсь превратить путь папок в гиперссылку в GridView, я не могу получить имя столбца правильно, и он возвращает: «DataBinding:« System.String »не содержит свойства с именем« Полное имя'." Что я делаю не так? это путь к папке, не называемый «FullName»?Directory.GetDirectories в GridView с связанной гиперссылкой

Вот мой код, любая помощь приветствуется: Code Behind (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 - это список строк (содержащий путь к папкам).

Ваша связанная гиперссылка содержит инструкцию Eval, требующую получить полное свойство FullName для каждого элемента вашего DataSource. Ваш DataSource будучи List, он может быть переведен так:

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

Теперь, надеюсь, вы начинаете видеть проблему: класс строка не имеет свойство FullName.

Решение заменить Eval (что является плохим решением в любом случае, так как это делает отражение и не очень эффективно) путем:

<%# Container.DataItem %> 

Который типизированной переменной даже то, что вы можете бросить

, чтобы вы могли даже написать это:

<%# (string)Container.DataItem %> 

EDIT: извините, я написал код в C#, я надеюсь, вы поймете (и что мое решение работает в VB!)

+0

Отлично, вы объяснили это блестяще, и это работает! Большое спасибо Trajan! Когда я написал это, я начал думать: «Может быть, список строк не имеет имен столбцов», поэтому я добирался туда :) – Stoy

+0

Рад, что он работает. Подумайте о Container.DataItem, если в один прекрасный день вы привяжете свое gridview к списку сложных объектов, это позволит избежать отражения метода Eval. – Trajan

 Смежные вопросы

  • Нет связанных вопросов^_^