Gridview фильтрация с использованием текстового поля в asp.net - PullRequest
1 голос
/ 12 ноября 2010

Я хочу знать, как динамически искать или фильтровать записи в сетке на основе символов, введенных в текстовое поле.Каков наилучший способ достичь этого?Любые примеры кодов или примеров будут действительно полезны.

Ответы [ 6 ]

5 голосов
/ 12 ноября 2010

Хитрость здесь в том, чтобы сделать привязку данных только при изменении текста в окне поиска, но вы должны всегда устанавливать код команды выбора источника данных .Таким образом, вы добавляете текстовое поле и кнопку с надписью «отправить», и у вас есть следующее:

    OnPageLoad -> 
if(SearchContron.Text.Length > 0)
  SqlDataSource1.SelectCommand = "SELECT * FROM TABLE WHERE Desc LIKE N'%" + SearchContron.Text +"%'"
else
  SqlDataSource1.SelectCommand = "SELECT * FROM TABLE "

и

OnSubmitButtonClick -> GridView.DataBind()

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

2 голосов
/ 21 июня 2013

enter image description here

enter image description here

Чтобы связать данные вида сетки, введите следующий код

 private void GridData()
    {
        string conString = ConfigurationManager.ConnectionStrings["MyCon"].ToString();
        SqlConnection sqlcon = new SqlConnection(conString);
        SqlCommand sqlcmd;
        SqlDataAdapter da;
        DataTable dt = new DataTable();
        String query;

        if (txtsearch.Text == "")
       {
           query = "select  PersonID,LastName,FirstName from Person";
        }
        else
        {
            query = "select  PersonID,LastName,FirstName from Person where PersonID like '" + txtsearch.Text + "%' or LastName like '" + txtsearch.Text + "%' or FirstName like '" + txtsearch.Text + "%'";
        }
        sqlcmd = new SqlCommand(query, sqlcon);
        sqlcon.Open();
        da = new SqlDataAdapter(sqlcmd);
        dt.Clear();
        da.Fill(dt);
        if (dt.Rows.Count > 0)
        {
            grdsearch.DataSource = dt;
            grdsearch.DataBind();
        }
        else
        {
            grdsearch.DataBind();
            Label1.Text = "No Records Found";
        }
        sqlcon.Close();
    }

Событие загрузки страницы

if (!IsPostBack)
        {
            GridData();
        }

для поиска кнопки вызова события вызова метода GridData () и Для очистки события нажатия кнопки напишите следующий код

        txtsearch.Text = "";
        GridData();
        Label1.Text = "";
2 голосов
/ 12 ноября 2010

Это просто,

Посмотрите здесь для основного руководства по добавлению Ajax-контроля на страницу.1) Добавьте текстовое поле, а также вид сетки в ту же панель обновления. 2) В событии нажатия клавиши текстового поля вы можете установить источник данных gird и вызвать команду databind.

Обратите внимание, что когда клавишанажатие будет запущено, это приведет к выполнению полного жизненного цикла страницы на стороне сервера.Следовательно, вам придется проверить, является ли сообщение обратно асинхронным или нет в вашем обработчике загрузки страниц.

Хитрость для уменьшения количества запускаемых запросов к базе данных состоит в том, чтобы установить таймер, когда пользователь нажимает клавишу с тайм-аутом, скажем, 500 мс, и выполнить привязку данных gridview в тиковом событии таймера.Если вы сделаете это, база данных будет запрашиваться только тогда, когда пользователь перестал что-то вводить.

Спасибо,Vamyip

0 голосов
/ 18 января 2019

реализует нажатие кнопки поиска следующим образом:

protected void searchButton_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(searchTextBox.Text))
        {
            SqlDataSource1.SelectCommand = "SELECT id,name,address, datetime FROM nirmaan.[seller] where id <>0" +
                " ORDER BY [name], [id]";
        }
        else
        {
            SqlDataSource1.SelectCommand = "SELECT id,name,address, datetime FROM nirmaan.[seller] where id <>0" +
                "and "+DropDownList1.SelectedValue+" LIKE '%" + searchTextBox.Text + "%' ORDER BY [name], [id]";
        }
        GridView1.DataBind();
    }

The view of my example

0 голосов
/ 30 марта 2011

Если вы используете другой способ работы условия фильтрации поиска для части заголовка вида сетки. это легко использовать реализовать в вашем коде. Это понятия, используемые без базы данных, но я использовал таблицу данных в linq. Я надеюсь, что этот код использовать полностью.

DataTable dt = (DataTable)Session["ProductTable"];
var query = from t in dt.AsEnumerable()
            where t.Field<string>("ProducId").StartsWith(txtProductId.Text.ToString().Trim())
            || t.Field<string>("ProducId").Contains(txtProductId.Text.ToString().Trim())
            select t;

Вот пример программы .

0 голосов
/ 02 декабря 2010

Если у вас нет особой необходимости делать это на сервере, почему бы не выполнить фильтрацию на клиенте?Решение типа DataTables является быстрым и удобным для пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...