1

我正在尝试从多个目录中获取目录列表并将它们放入网格视图中。到目前为止一切顺利,我什至包含了一个 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>

亲切的问候,詹姆斯。

4

1 回答 1

1

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

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

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

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

解决方案是将 Eval 替换为:

<%# Container.DataItem %>

即使您可以强制转换,它也是一个类型变量

所以你甚至可以这样写:

<%# (string)Container.DataItem %>

编辑:抱歉,我用 C# 编写了代码,希望你能理解(并且我的解决方案在 VB 中有效!)

于 2013-07-04T11:44:40.590 回答