DirectoryInfo GetFiles()过滤网格

时间:2013-03-18 14:03:45

标签: c# asp.net datagrid directoryinfo getfiles

我正在处理一个页面,该页面在网格中的特定目录中显示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,因为我的所有页面都提供了链接?

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

感谢。

2 个答案:

答案 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屏幕:

enter image description here

答案 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