我正在处理一个页面,该页面在网格中的特定目录中显示pdf文件,以及指向该文件的链接。
我正在修改Scott Mitchell的例子:http://aspnet.4guysfromrolla.com/articles/052803-1.aspx
我将代码从vb转换为c#。
<%@ Import Namespace="System.IO" %>
<script language="C#" runat="server">
public void Page_Load(object sender, EventArgs e)
{
DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath(""));
articleList.DataSource = dirInfo.GetFiles("*.pdf");
articleList.DataBind();
}
</script>
<asp:DataGrid runat="server" id="articleList" Font-Name="Verdana"
AutoGenerateColumns="False" AlternatingItemStyle-BackColor="#eeeeee"
HeaderStyle-BackColor="Navy" HeaderStyle-ForeColor="White"
HeaderStyle-Font-Size="15pt" HeaderStyle-Font-Bold="True">
<Columns>
<asp:HyperLinkColumn DataNavigateUrlField="Name" DataTextField="Name"
HeaderText="File Name" target="_blank"/>
<asp:BoundColumn DataField="LastWriteTime" HeaderText="Last Write Time"
ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}" />
</Columns>
</asp:DataGrid>
以上代码适用于显示文件。我现在想做的是添加网格过滤。
文件名在网格中显示为pdf的链接。如何添加允许您过滤/搜索特定文件名的文本字段,或者以__开头的文件名?
此外,是否可以阻止浏览器缓存pdf,因为我的所有页面都提供了链接?
任何帮助或想法都将不胜感激。
感谢。
答案 0 :(得分:1)
尝试下面它会帮助你....
在HTML Design View中,在DataGridView添加Below代码之前,它将创建Textbox和Button
<强> HTML:强>
Enter the Name of the file : <asp:TextBox ID="txtFilter" runat="server"></asp:TextBox>
<asp:Button ID="btnShow"
runat="server" Text="ShowData" onclick="btnShow_Click" />
添加按钮点击事件如下...
<强> CS:强>
protected void btnShow_Click(object sender, EventArgs e)
{
ShowData();
}
public void ShowData()
{
string FilterValue = txtFilter.Text.ToUpper();
DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath(""));
FileInfo[] info = dirInfo.GetFiles("*.zip"); //Get FileInfo and Save it a FileInfo[] Array
List<Getfiles> _items = new List<Getfiles>(); // Define a List with Two coloums
foreach (FileInfo file in info) //Loop the FileInfo[] Array
_items.Add(new Getfiles { Name = file.Name, LastWriteTime = file.LastWriteTime.ToString("MM/dd/yyyy") }); // Save the Name and LastwriteTime to List
//you can use Any one the Filtered list from the below...
var tlistFiltered = _items.Where(item => item.Name.ToUpper() == FilterValue); // Find the File by their File Name
var tlistFiltered1 = _items.Where(item => item.Name.ToUpper().Contains(FilterValue)); // Find the file that Contains Specific word in its File Name
var tlistFiltered2 = _items.Where(item => item.Name.ToUpper().StartsWith(FilterValue));// Find tha File that StartsWith Some Specific Word
articleList.DataSource = tlistFiltered; //Assign the DataSource to DataGrid
articleList.DataBind();
}
public class Getfiles
{
public string Name { get; set; }
public string LastWriteTime { get; set; }
}
OutPut屏幕:
答案 1 :(得分:0)
您可以尝试使用ObjectDataSource,然后将其传递给DataGrid。对象数据源将包装目录信息调用。
拥有ObjectDataSource后,您应该能够使用DataGrid的内置过滤和排序功能。
Scott Mitchel有一些关于此的教程:
http://msdn.microsoft.com/en-us/library/aa581784.aspx
这是一个使用Sql的方法,但您应该能够轻松地调整它以提取文件列表:
http://asp-net-example.blogspot.nl/2008/11/aspnet-gridview-and-objectdatasource.html