我正在尝试从多个目录中获取目录列表并将它们放入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>
亲切的问候, 詹姆斯。
答案 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中运行!)