Member 12704984 Ответов: 1

Поиск базы данных через текстовое поле и отображение результата в виде списка


Когда я помещаю текст в текстовое поле с помощью события textchanged, listview показывает данные повторно .

Что я уже пробовал:

я уже использовал этот код ниже здесь ,
string name = textboxsearch.Text;
if (textboxsearch.Text != "")
{
    con.Open();
    string str = "select * from all_record where title like'" + name + "%'";
    OleDbCommand cmd = new OleDbCommand(str, con);
    OleDbDataReader dr = cmd.ExecuteReader();
    if (dr.Read())
    {
        dr.Close();                    
        OleDbDataReader dr1 = cmd.ExecuteReader();
        while (dr1.Read())
        {
            listView1.Visible = true;
            ListViewItem item = new ListViewItem(dr1["title"].ToString());
            item.SubItems.Add(dr1["last_name"].ToString());
            item.SubItems.Add(dr1["Age"].ToString());
            listView1.Items.Add(item);
        }
        dr1.Close();
    }
    else
    {
        listView1.Visible = false;
        listView1.Items.Clear();
    }
    con.Close();
}
else
{
    listView1.Visible = false;
    listView1.Items.Clear();
}

Richard MacCutchan

Почему вы создаете два OleDbDataReader предметы?

Richard MacCutchan

Скорее всего, потому, что событие TextChanged запускается для каждого введенного символа. Вам нужен какой-то способ убедиться, что вы вызываете этот код только тогда, когда пользователь перестал печатать.

Member 12704984

Ричард, ты прав , у тебя есть какое-нибудь решение ?

Richard MacCutchan

Вам нужно выбрать другое событие (возможно LostFocus), или найти какой-то другой способ определить, когда у вас есть весь текст. Многое зависит от требований приложения.

Member 12704984

просматривал все события .

Richard MacCutchan

Это должно мне что-то сказать?

$*Developer - Vaibhav*$

Или вы можете добавить свой код TextBox_Leave событие

Member 12704984

Я уже пробовал там, но и результат тот же .

$*Developer - Vaibhav*$

Для вашего ref :

http://www.c-sharpcorner.com/uploadfile/9a3ae2/using-listview-control-windows-form-application3/

Member 12704984

это не вид из моего решения.

1 Ответов

Рейтинг:
2

Karthik_Mahalingam

попробовать это
два datareaders не обязательно. и это хорошо, чтобы очистить значения изначально при вызове события, так что дубликаты не будут там.

string name = textboxsearch.Text;

      listView1.Visible = false;
      listView1.Items.Clear();
      if (name != "")
      {

          con.Open();
          string str = "select * from all_record where title like'@name%'";
          OleDbCommand cmd = new OleDbCommand(str, con);
          cmd.Parameters.Add("@name",name);
          OleDbDataReader dr1 = cmd.ExecuteReader();
              while (dr1.Read())
              {
                  listView1.Visible = true;
                  ListViewItem item = new ListViewItem(dr1["title"].ToString());
                  item.SubItems.Add(dr1["last_name"].ToString());
                  item.SubItems.Add(dr1["Age"].ToString());
                  listView1.Items.Add(item);
              }
              dr1.Close();
           con.Close();
       }

      }


обратитесь к этому вопросу SQL-инъекция[^]