我想知道如何根据在文本框中输入的字符动态搜索或过滤网格视图中的记录。实现这一目标的最佳方法是什么?任何示例代码或示例都非常有用。
这里的技巧是只在搜索框中的文本更改时才创建数据绑定,但您必须始终设置数据源选择命令代码。因此,您添加一个文本框,以及一个说,提交的按钮,您将拥有以下内容:
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)在文本框的按键事件中,可以设置网格的数据源并调用databind命令。
请注意,当按下按键时,将导致在服务器端执行完整的页面生命周期。因此,您必须在页面加载甚至处理程序中检查回发是否异步。
减少被触发的数据库查询数量的一个技巧是在用户按下具有超过500英里的超时的键时设置计时器,并在计时器的tick事件中进行gridview的数据绑定。如果执行此操作,则仅在用户停止键入内容时才会查询数据库。
谢谢, Vamyip
要绑定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;
这是一个sample program。
实现搜索按钮的onclick,如下所示:
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();
}