【问题标题】:Directory.GetDirectories in a GridView with Bound Hyperlink具有绑定超链接的 GridView 中的 Directory.GetDirectories
【发布时间】:2013-07-04 11:27:55
【问题描述】:

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

亲切的问候, 詹姆斯。

【问题讨论】:

    标签: asp.net vb.net gridview getdirectories


    【解决方案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 中有效!)

    【讨论】:

    • 完美,您解释得非常出色,而且效果很好!非常感谢图拉真!当我写这篇文章时,我确实开始认为“可能字符串列表没有列名”,所以我到了那里:)
    • 很高兴它有效。想想 Container.DataItem 如果有一天你将你的 gridview 绑定到一个复杂对象的列表上,它会避免 Eval 方法的反射。
    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多