2013-03-18 5 views
0

파일에 대한 링크와 함께 그리드의 특정 디렉토리에 PDF 파일을 표시하는 페이지에서 작업하고 있습니다.DirectoryInfo GetFiles() 필터 격자

여기 스콧 미첼의 예를 수정하고 있습니다 : http://aspnet.4guysfromrolla.com/articles/052803-1.aspx

는 전 C#을 VB에서 코드를 변환.

<%@ 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

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; } 
     } 
아래의 코드를 추가, 그것은 텍스트 상자 및 버튼

HTML을 생성합니다

OutPut 화면 :

enter image description here

+0

이렇게하면 도움이됩니다. 필터는 작동하지만 입력 텍스트 필드를 사용하여 필터링하는 방법은 무엇입니까? 샘플 코드를 보내 주셔서 감사합니다. 매우 도움이됩니다. – Jack

+0

@ 잭 : 내 코드를 변경했습니다 ... 지금 시도하십시오 ... – Pandian

+0

뭔가 빠졌다고 생각합니다. 당신이 추천 한 변경 사항으로, 페이지는 텍스트 박스 입력을 사용하지 않고'var tlistFiltered1 = _items.Where (item => item.Name.Contains ("FilterValue"));에서'FilterValue'를 사용합니다. 텍스트 상자에서 'FilterValue'를 정의 하시겠습니까? – Jack

0

ObjectDataSource를 사용하여 DataGrid에 전달할 수 있습니다. Object Data Source는 Directory Info 호출을 래핑합니다.

일단 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