【问题标题】:Gridview filtering using textbox in asp.net使用asp.net中的文本框进行Gridview过滤
【发布时间】:2011-05-08 23:54:09
【问题描述】:

我想知道如何根据在文本框中输入的字符动态搜索或过滤网格视图中的记录。实现这一目标的最佳方法是什么?任何示例代码或示例都会非常有帮助。

【问题讨论】:

    标签: asp.net search gridview textbox filter


    【解决方案1】:

    这里的技巧是仅在搜索框上的文本发生变化时进行数据绑定,但您必须始终设置数据源选择命令代码。因此,您添加一个文本框和一个表示提交的按钮,然后您将拥有以下内容:

        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 命令上单独搜索每个单词,您还可以使其更高级。

    【讨论】:

    • 感谢您的回复。任何替代方式,以便我可以避免按钮控制。我只想使用 textbox 。任何与文本框一起使用的事件处理程序??。我在某个论坛上看到,这可以使用一些 Ajax 控件来完成。你能帮我吗。我只是一个初学者。
    • @Pavan 首先使用按钮创建它,进行测试,然后您可以使用 css 添加隐藏控件,并在您输入文本时使用 javascript 自动单击。但首先要让工作变得简单……
    • 是的。谢谢你的回复,伙计..:)。先试试这个。
    【解决方案2】:

    很简单,

    查看here 获取有关将 Ajax 控件添加到页面的基本教程。 1)将文本框和网格视图添加到同一个更新面板中 2)在文本框的按键事件中,可以设置gird的数据源,调用databind命令。

    请注意,当按键被触发时,会导致整个页面生命周期在服务器端执行。因此,您必须在页面加载偶数处理程序中检查回发是否是异步的。

    减少被触发的数据库查询数量的一个技巧是当用户按下一个超时时间为 ...500 毫秒的键时设置一个计时器,并在计时器的滴答事件中执行 gridview 的数据绑定。如果这样做,只有在用户停止输入内容时才会查询数据库。

    谢谢,
    瓦米普

    【讨论】:

    • 感谢您的时间和考虑。我会尝试上述两种解决方案。并感谢您的链接。
    【解决方案3】:

    要绑定gridview数据写如下代码

     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 = "";
    

    【讨论】:

      【解决方案4】:

      除非您有特殊需要在服务器上执行此操作,否则为什么不在客户端执行过滤?像DataTables 这样的解决方案快速且用户友好。

      【讨论】:

        【解决方案5】:

        如果您对网格视图标题部分的搜索过滤条件采取其他方式。在您的代码中很容易使用实现。这是在没有数据库的情况下使用的概念,但我在 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;
        

        这是sample program

        【讨论】:

          【解决方案6】:

          像这样实现搜索按钮的点击:

          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();
              }
          

          【讨论】:

            猜你喜欢
            • 2013-07-29
            • 1970-01-01
            • 2021-01-03
            • 1970-01-01
            • 2014-11-17
            • 1970-01-01
            • 2018-03-14
            • 2012-06-09
            • 1970-01-01
            相关资源
            最近更新 更多