2013-07-20 2 views
0

У меня есть ListView, который должен получить данные из базы данных SQL .. Я хочу, чтобы поиск по тексту вошел в текстовом поле и показать результат после нажатия кнопки и скрыть записи, которые не соответствуютC# фильтр ListView с помощью текстового поля

вот мой подход

плз помощь

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace Inventory_Manager_Pro 
{ 
public partial class Modify : Form 
{ 

    public SqlConnection cn = new SqlConnection("Data Source=10.0.0.13;Initial Catalog=INVENTDB;Persist Security Info=True;User ID=sa;[email protected];Encrypt=False"); 


    public Modify() 
    { 
     InitializeComponent(); 
    } 

    private void populate() 
    { 
     listView1.Items.Clear(); 

     SqlCommand cm = new SqlCommand("SELECT * FROM lapdev", cn); 

     try 
     { 

      SqlDataReader dr = cm.ExecuteReader(); 
      while (dr.Read()) 
      { 

       ListViewItem it = new ListViewItem(dr["fillingcode"].ToString()); 
       it.SubItems.Add(dr["username"].ToString()); 
       it.SubItems.Add(dr["branch"].ToString()); 
       it.SubItems.Add(dr["department"].ToString()); 
       it.SubItems.Add(dr["agency"].ToString()); 
       it.SubItems.Add(dr["computername"].ToString()); 
       it.SubItems.Add(dr["lapmodel"].ToString()); 
       it.SubItems.Add(dr["lapserial"].ToString()); 
       it.SubItems.Add(dr["assetnumber"].ToString()); 
       it.SubItems.Add(dr["os"].ToString()); 
       it.SubItems.Add(dr["winlicense"].ToString()); 
       it.SubItems.Add(dr["office"].ToString()); 
       it.SubItems.Add(dr["officelicense"].ToString()); 
       it.SubItems.Add(dr["hddsize"].ToString()); 
       it.SubItems.Add(dr["processor"].ToString()); 
       it.SubItems.Add(dr["ram"].ToString()); 
       it.SubItems.Add(dr["macadress"].ToString()); 
       it.SubItems.Add(dr["ipadress"].ToString()); 

       listView1.Items.Add(it); 

      } 

      dr.Close(); 
      dr.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 

    } 

    private void Modify_Shown(object sender, EventArgs e) 
    { 
     try 
     { 
      cn.Open(); 
      populate(); 
     } 
     catch (SqlException ex) 
     { 
      MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 
      Application.ExitThread(); 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
listView1.Items.Clear(); // clear list items before adding 
    listView1.Items.AddRange(Items.Where(i=>string.IsNullOrEmpty(textBox1.Text)||i.Name.StartsWith(textBox1.Text)) 
     .Select(c => new ListViewItem(c.Name)).ToArray()); 

    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 



    } 

    private void button2_Click(object sender, EventArgs e) 
    { 

    } 

} 

}

+0

Я вижу, где именно ваша проблема ... но можете ли вы? Вы пытались решить это вообще? Вы изучили какой-либо SQL дальше, чем 'SELECT * FROM'? Мы можем дать вам ответы ... но они являются ответами, которые вы должны иметь возможность исследовать самостоятельно. Извините, если это звучит суровым. –

+0

Я искал 2 дня без остановки .. пожалуйста, помогите, если u может –

+0

"SELECT * FROM lapdev WHERE YourField = '" + textBox1.Text + "'" – terrybozzio

ответ

2

В вашем методе pupolate сделать это:

private void populate() 
    { 
     listView1.Items.Clear(); 
     SqlCommand cm; 
     if(textBox1.Text == "") 
      cm = new SqlCommand("SELECT * FROM lapdev", cn); 
     else 
      cm = new SqlCommand("SELECT * FROM lapdev WHERE YourField='" + textBox1.Text + "'", cn); 


     try 
     { 

      SqlDataReader dr = cm.ExecuteReader(); 
      while (dr.Read()) 
      { 

       ListViewItem it = new ListViewItem(dr["fillingcode"].ToString()); 
       it.SubItems.Add(dr["username"].ToString()); 
       it.SubItems.Add(dr["branch"].ToString()); 
       it.SubItems.Add(dr["department"].ToString()); 
       it.SubItems.Add(dr["agency"].ToString()); 
       it.SubItems.Add(dr["computername"].ToString()); 
       it.SubItems.Add(dr["lapmodel"].ToString()); 
       it.SubItems.Add(dr["lapserial"].ToString()); 
       it.SubItems.Add(dr["assetnumber"].ToString()); 
       it.SubItems.Add(dr["os"].ToString()); 
       it.SubItems.Add(dr["winlicense"].ToString()); 
       it.SubItems.Add(dr["office"].ToString()); 
       it.SubItems.Add(dr["officelicense"].ToString()); 
       it.SubItems.Add(dr["hddsize"].ToString()); 
       it.SubItems.Add(dr["processor"].ToString()); 
       it.SubItems.Add(dr["ram"].ToString()); 
       it.SubItems.Add(dr["macadress"].ToString()); 
       it.SubItems.Add(dr["ipadress"].ToString()); 

       listView1.Items.Add(it); 

      } 

      dr.Close(); 
      dr.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 

    } 

и в вашей кнопки мыши события:

private void button1_Click(object sender, EventArgs e) 
    { 
     //listView1.Items.Clear(); // clear list items before adding 
     populate(); 
     //you type what you want in textbox then click button. 
    } 

вы даже не нужно вызвать ясно на кнопку мыши, так как метод Заселите уже заботится об этом.

+0

человек .. и мой герой поблагодарить вас очень очень много –

+0

новое редактирование я забыл не нужно вызывать ясность на кнопке, метод заполнения заботится об этом. – terrybozzio

Смежные вопросы