0

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

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

谢谢。

4

2 回答 2

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

输出屏幕:

在此处输入图像描述

于 2013-03-18T14:46:16.203 回答
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

于 2013-03-18T14:11:01.160 回答