我有以下GridView
,其中显示File Name
和Download
按钮以及View in Browser
按钮:
<asp:GridView ID="GridView1" ClientIDMode="Static" runat="server" AutoGenerateColumns="false" EmptyDataText = "No PDF was generated">
<Columns>
<asp:BoundField DataField="Text" HeaderText="File Name" />
<asp:BoundField DataField="Text" HeaderText="File Date" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkDownload" Text="Download" runat="server" CommandArgument='<%# Container.DataItemIndex %>' OnClick="DownloadFile" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkView" Text="View in Browser" CommandArgument='<%# Container.DataItemIndex %>' OnClientClick="window.document.forms[0].target='blank';" runat="server" OnClick="ViewFile" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我正在使用以下方法修改C#中的File Name
:
files.Add(new ListItem(Path.GetFileName(filePath), filePath));
我希望能够将文件修改日期添加到每个文件的File Date
列,因此我尝试使用以下行:
files.Add(new ListItem(File.GetLastWriteTimeUtc(Path.GetFileName(filePath)).toString(), filePath));
但是,这会在每个文件名下面添加另一行,并显示错误的日期。
以下是截图:
如何修复我的代码,以便每个file name
列对应file date
列中文件的修改日期?
完整代码:
if (!Page.IsPostBack)
{
try
{
string[] filePaths = Directory.GetFiles(@"C:\PDFGenerate");
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
files.Add(new ListItem(Path.GetFileName(filePath), filePath));
files.Add(new ListItem(File.GetLastWriteTime(Path.GetFileName(filePath)).ToString(), filePath));
}
GridView1.DataSource = files;
GridView1.DataBind();
}
catch (Exception ce)
{
}
//MessageBox.Show(files.Count() + ""); // displays the count for the files being displayed
}
答案 0 :(得分:2)
也许这可行:
将“文件日期”列的asp:BoundField
更改为:
<asp:BoundField DataField="Value" HeaderText="File Date" />
你的foreach
是这样的:
foreach (string filePath in filePaths)
{
files.Add(new ListItem(Path.GetFileName(filePath), File.GetLastWriteTime(Path.GetFileName(filePath)).ToString()));
}
ListItem
具有“文字”和“价值”属性,我认为这些属性会映射到您asp:BoundField
的{{1}}属性。然后在DataField
中为每个文件添加1个条目,并分别填充“文本”和“值”字段。