如何使用列表<>使用 C# 在 ASP.NET 中作为中继器数据源的集合
我有一个如下所示的列表集合:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace FileExplorer.Classes
{
public class NewAddedFiles
{
public string FileName;
public string FilePath;
public DateTime FileCreationDate;
}
}
private void GetFilesFromDirectory(string PhysicalPath)
{
DirectoryInfo Dir = new DirectoryInfo(PhysicalPath);
FileInfo[] FileList = Dir.GetFiles("*.*", SearchOption.AllDirectories);
List<NewAddedFiles> list = new List<NewAddedFiles>();
NewAddedFiles NewAddedFile = new NewAddedFiles();
foreach (FileInfo FI in FileList)
{
//Response.Write(FI.FullName);
//Response.Write("<br />");
string AbsoluteFilePath = FI.FullName;
string RelativeFilePath = "~//" + AbsoluteFilePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);
NewAddedFile.FileName = FI.Name;
NewAddedFile.FilePath = RelativeFilePath;
NewAddedFile.FileCreationDate = FI.CreationTime;
list.Add(NewAddedFile);
}
Repeater1.DataSource = ????????????;
Repeater1.DataBind();
}
我在 aspx 中的转发器如下所示:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("FileName") %>'></asp:Label>
<br />
<asp:Label ID="Label2" runat="server" Text='<%# Eval("FilePath") %>'></asp:Label>
<br />
<asp:Label ID="Label3" runat="server" Text='<%# Eval("FileCreationDate") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
如何将转发器数据源设置为该列表<>收集并用它来填充重复的标签?
编辑:
设置Repeater1.DataSource = list;后出现错误
或
在该中继器的 Item_DataBound 中添加一些代码后,就像这个答案一样
数据绑定:“FileExplorer.Classes.NewAddedFiles”不包含 名为“FileName”的属性。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
只需将您的
列表
设置为数据源
:编辑
您没有实际的属性,您正在使用字段。您需要创建实际属性以便数据绑定能够找到它们。
所以修改你的类:
Just set your
list
as theDataSource
:EDIT
You don't have actual Properties, you're using Fields. You need to create actual properties in order for the databinding to find them.
So modify your class like:
嗯,只是这样怎么样:
这当然是我所期望的......你尝试过吗?
我怀疑您一次又一次地看到相同的值 - 这是因为您使用对单个对象的多个引用填充列表。您应该在循环内创建
NewAddedFile
:或者使用 LINQ:
顺便说一下,关于
FilePath
,我怀疑有更好的方法...Um, how about just:
That's certainly what I'd expect... have you tried it?
I suspect you're seeing the same values again and again - that's because you're populating your list with multiple references to a single object. You should be creating your
NewAddedFile
inside your loop:Or using LINQ:
With respect to the
FilePath
by the way, I suspect there are better approaches...然后处理repeater的Item_databound事件
Then handle Item_databound event of repeater
只需将列表设置为
Datasource
属性:Repeater1.Datasource = list;
Simply set the list as the
Datasource
property:Repeater1.Datasource = list;
您需要在每次迭代时创建一个 NewAddedFiles 对象:
you need to create a NewAddedFiles object at each iteration:
是的...请确保为每次迭代添加 NewAddedFiles。我终于看到了上面那个人的评论,但我没有足够的积分来给它一分。
我的 aspx 看起来像这样:
YES...MAKE SURE YOU ADD NewAddedFiles for each iteration. I finally saw the person's comment above but I don't have enough points to give it a one-up.
And my aspx looks like this: