2013-03-18 183 views
0

我正在一个页面上显示网格中的特定目录中的pdf文件以及指向该文件的链接。DirectoryInfo GetFiles()过滤器网格

我在这里修改斯科特·米切尔的例子: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,因为我的所有页面都提供了一个链接到它?

任何帮助或想法,将不胜感激。

谢谢。

回答

1

请尝试下图,它会帮助你......

在HTML设计视图中,在DataGridView之前添加下面的代码,它会创建文本框和按钮

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; } 
     } 

输出屏幕:

enter image description here

+0

这会有所帮助。该过滤器的工作原理,但我怎样才能过滤使用输入文本字段?感谢您的示例代码。很有帮助。 – Jack 2013-03-18 16:34:18

+0

@Jack:我改变了我的代码...现在就试试吧... – Pandian 2013-03-18 16:50:33

+0

我想我错过了一些东西。根据你推荐的改变,页面不使用文本框输入,而是使用'var tlistFiltered1 = _items.Where中的'FilterValue'(item => item.Name.Contains(“FilterValue”));'我怎样才能从文本框中定义“FilterValue”? – Jack 2013-03-18 17:21:21

0

您可以尝试使用ObjectDataSource,然后将其传递给您的DataGrid。对象数据源将包装目录信息调用。

一旦你有一个ObjectDataSource,你应该可以使用DataGrid的内置过滤和排序功能。

斯科特·米切尔有几个教程在此:

http://msdn.microsoft.com/en-us/library/aa581784.aspx

下面是一个使用SQL,但你应该能够很容易地适应它拉一个文件列表:

http://asp-net-example.blogspot.nl/2008/11/aspnet-gridview-and-objectdatasource.html