2012-03-30 3 views
1

주어진 디렉토리의 모든 파일을 표시하는 응용 프로그램이 있습니다. 이제 애플리케이션 내에서 검색 기능을 구현하려고합니다. 나는 textBox_textChanged 메서드를 사용하여 검색을 더 빠르게 구현합니다. 그러나 어떻게 든 나는 그것이 작동하도록 할 수 없다. 나는 그 문제가 뭔지 모른다. 여기 내 코드입니다.데이터 테이블을 필터링 할 수 없습니까?

{ 
    public partial class Form1 : Form 
    { private Timer timer; 
     private int count; 
     DataTable dt = new DataTable(); 
     DataRow dr; 
     String[] s1; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 


     private void Form1_Load(object sender, EventArgs e) 
     { 
      count = 0; 
      timer = new Timer(); 
      timer.Interval = 1000; 
      timer.Tick += new EventHandler(timer1_Tick); 
      timer.Start(); 
      s1 = Directory.GetFiles(@"C:\Documents and Settings\Administrator\Desktop\FILE","*.*",SearchOption.AllDirectories); 
      for (int i = 0; i <= s1.Length - 1; i++) 
      { 
       if (i == 0) 
       { 
        dt.Columns.Add("File_Name"); 
        dt.Columns.Add("File_Type"); 
        dt.Columns.Add("File_Size"); 
        dt.Columns.Add("Create_Date"); 
       } 

       //Get each file information 
       FileInfo info = new FileInfo(s1[i]); 
       FileSystemInfo sysInfo = new FileInfo(s1[i]); 
       dr = dt.NewRow(); 
       //Get File name of each file name 
       dr["File_Name"] = sysInfo.Name; 
       //Get File Type/Extension of each file 
       dr["File_Type"] = sysInfo.Extension; 
       //Get File Size of each file in KB format 
       dr["File_Size"] = (info.Length/1024).ToString(); 
       //Get file Create Date and Time 
       dr["Create_Date"] = sysInfo.CreationTime.Date.ToString("dd/MM/yyyy"); 
       //Insert collected file details in Datatable 
       dt.Rows.Add(dr); 
       // 


       if ((info.Length/1024) > 5000) 
       { 
        MessageBox.Show("" + sysInfo.Name + " had reach its size limit."); 
       } 
      } 
      if (dt.Rows.Count > 0) 
      { 
       //Finally Add DataTable into DataGridView 
       dataGridView1.DataSource = dt; 
      } 
     } 
     private void timer1_Tick(object sender, EventArgs e) 
     { 
       count++; 
       if (count == 300) 
       { 
        count = 0; 
        timer.Stop(); 
        Application.Restart(); 
       } 
     } 
     public string secondsToTime(int seconds) 
     { 
      int minutes = 0; 
      int hours = 0; 

      while (seconds >= 60) 
      { 
       minutes += 1; 
       seconds -= 60; 
      } 
      while (minutes >= 60) 
      { 
       hours += 1; 
       minutes -= 60; 
      } 

      string strHours = hours.ToString(); 
      string strMinutes = minutes.ToString(); 
      string strSeconds = seconds.ToString(); 

      if (strHours.Length < 2) 
       strHours = "0" + strHours; 
      if (strMinutes.Length < 2) 
       strMinutes = "0" + strMinutes; 
      if (strSeconds.Length < 2) 
       strSeconds = "0" + strSeconds; 
      return strHours + ":" + strMinutes + ":" + strSeconds; 
     } 


     //this is the filter code fragment. 
     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 
      DataRow[] select = dt.Select("File_Name = '" + textBox1.Text+"'"); 
     } 
    } 
} 
+1

정확하게 "작동하지 않는"것. 너무 많은 사람들이 문제에 대해 구체적이지 않은 경우 코드를 살펴본 후 시간을 보내고 싶지 않습니다. 죄송합니다. –

+0

. 나는 필터가 작동하지 않는다는 말을 정확히 의미했습니다. 텍스트 상자에 값을 입력해도 필터링되지 않습니다. –

답변

1

당신의 TextChanged를 사용하는 경우, 당신이 당신이 당신의 입력에 포함 된 모든 파일 이름과 일치합니다 입력 한 내용을 일부 검색에 일치한다고 가정 예를 들어, "입력하면 그는 등 도움말 ","을 HelloWorld ","이 일치합니다 "

편집 :

당신의 데이터 테이블에 직접 바인딩, 당신이 BindingSource 당신에게 필터를 제공하기 때문에 기능을 사용한다 대신에. 이에

if (dt.Rows.Count > 0) 
{ 
    //Finally Add DataTable into DataGridView 
    dataGridView1.DataSource = dt; 
} 

:

public BindingSource bindingSource; 

그런 다음이 코드 변경

if (dt.Rows.Count > 0) 
{ 
    //Finally Add DataTable into DataGridView 
    bindingSource = new BindingSource(); 
    bindingSource.DataSource = dt; 
    dataGridView1.DataSource = bindingSource; 
} 

을 마지막으로 실제 필터링 할이에 TextChanged 이벤트 핸들러를 변경합니다

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    bindingSource.Filter = string.Format("File_Name LIKE '%{0}%'", textBox1.Text); 
} 
+0

감사합니다. @BradRem. 나는 그것을 시도했지만 여전히 작동하지 않습니다. 내 gridview 여전히 텍스트 상자에 값을 입력 할 때 모든 파일을 표시합니다. –

+0

@ shahrul1509, 실제로 gridView를 필터링하는 위치가 표시되지 않습니다. 선택은 아마도 작동하지만 그리드에 연결되어 있지 않습니다! –

+0

@ shahrul1509, 요청에 따라 DataGridview를 필터링하는 방법을 보여주는 코드를 업데이트했습니다. –

관련 문제