невозможно отфильтровать в таблице данных? - PullRequest
1 голос
/ 30 марта 2012

У меня есть приложение, которое отображает все файлы в данном каталоге.А теперь я хочу реализовать функцию поиска в приложении.Я использую метод 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 Ответ

1 голос
/ 30 марта 2012

Если вы используете TextChanged, я предполагаю, что вы хотите сопоставлять при частичном поиске, где то, что вы вводите, будет соответствовать любым именам файлов, в которых содержится ваш ввод. Например, если вы введете «Он», это будет соответствовать «Справка», « HelloWorld "и др.

Edit:

Вместо привязки непосредственно к вашей таблице данных, вы должны использовать BindingSource , поскольку он предоставит вам функцию фильтрации.

public BindingSource bindingSource;

Затем измените этот код:

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

К этому:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...