带有绑定超链接的GridView中的Directory.GetDirectories

时间:2013-07-04 11:27:55

标签: asp.net vb.net gridview getdirectories

我正在尝试从多个目录中获取目录列表并将它们放入gridview中。到目前为止,我甚至已经包含了一个searchPattern来根据查询字符串返回文件夹名称。但是我的问题在于当我尝试将文件夹路径转换为GridView中的超链接时,我似乎无法正确获取列名称并返回:“DataBinding:'System.String'不包含名称为'的属性'全名'。”我究竟做错了什么?文件夹路径不是“FullName”吗?

这是我的代码,任何帮助表示赞赏: 代码背后(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>

亲切的问候, 詹姆斯。

1 个答案:

答案 0 :(得分:0)

您的GridView数据源是一个字符串列表(包含文件夹的路径)。

您的绑定超链接包含一个Eval指令,要求检索DataSource的每个项目的le FullName属性。您的DataSource是List,它可以像这样翻译:

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

现在希望您开始看到问题:字符串类没有任何FullName属性。

解决方案是通过以下方式替换Eval(这是一个糟糕的解决方案,因为它反射并且效率不高):

<%# Container.DataItem %>

即使您可以投射

,这是一个类型变量

所以你甚至可以这样写:

<%# (string)Container.DataItem %>

编辑:抱歉,我在C#中编写代码,希望您能理解(我的解决方案在VB中运行!)