【发布时间】:2011-05-08 23:54:09
【问题描述】:
我想知道如何根据在文本框中输入的字符动态搜索或过滤网格视图中的记录。实现这一目标的最佳方法是什么?任何示例代码或示例都会非常有帮助。
【问题讨论】:
标签: asp.net search gridview textbox filter
我想知道如何根据在文本框中输入的字符动态搜索或过滤网格视图中的记录。实现这一目标的最佳方法是什么?任何示例代码或示例都会非常有帮助。
【问题讨论】:
标签: asp.net search gridview textbox filter
这里的技巧是仅在搜索框上的文本发生变化时进行数据绑定,但您必须始终设置数据源选择命令代码。因此,您添加一个文本框和一个表示提交的按钮,然后您将拥有以下内容:
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 命令上单独搜索每个单词,您还可以使其更高级。
【讨论】:
很简单,
查看here 获取有关将 Ajax 控件添加到页面的基本教程。 1)将文本框和网格视图添加到同一个更新面板中 2)在文本框的按键事件中,可以设置gird的数据源,调用databind命令。
请注意,当按键被触发时,会导致整个页面生命周期在服务器端执行。因此,您必须在页面加载偶数处理程序中检查回发是否是异步的。
减少被触发的数据库查询数量的一个技巧是当用户按下一个超时时间为 ...500 毫秒的键时设置一个计时器,并在计时器的滴答事件中执行 gridview 的数据绑定。如果这样做,只有在用户停止输入内容时才会查询数据库。
谢谢,
瓦米普
【讨论】:
要绑定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 = "";
【讨论】:
除非您有特殊需要在服务器上执行此操作,否则为什么不在客户端执行过滤?像DataTables 这样的解决方案快速且用户友好。
【讨论】:
如果您对网格视图标题部分的搜索过滤条件采取其他方式。在您的代码中很容易使用实现。这是在没有数据库的情况下使用的概念,但我在 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;
【讨论】:
像这样实现搜索按钮的点击:
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();
}
【讨论】: