我想知道如何根据在文本框中输入的字符动态搜索或过滤网格视图中的记录。实现这一目标的最佳方法是什么?任何示例代码或示例都非常有用。
答案 0 :(得分:5)
这里的技巧是在搜索框上更改文本时仅使数据绑定,但您必须始终设置数据源选择命令代码。所以你添加了一个文本框和一个说,提交的按钮,你有以下内容:
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命令中单独搜索每个文本,也可以使其更高级。
答案 1 :(得分:2)
简单,
查看here以获取有关向页面添加Ajax控件的基本教程。 1)将文本框和网格视图添加到同一更新面板中 2)在文本框的按键事件中,您可以设置gird的数据源并调用databind命令。
请注意,当按下按键时,将导致在服务器端执行完整的页面生命周期。因此,您必须在页面加载甚至处理程序中检查回发是否异步。
减少被触发的数据库查询数量的一个技巧是在用户按下具有超过500英里的超时的键时设置计时器并在计时器的tick事件中进行gridview的数据绑定。如果这样做,只有在用户停止输入内容时才会查询数据库。
谢谢,
Vamyip
答案 2 :(得分:2)
要绑定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 = "";
答案 3 :(得分:0)
除非您特别需要在服务器上执行此操作,否则为什么不在客户端上执行过滤?像DataTables这样的解决方案快速且用户友好。
答案 4 :(得分:0)
如果您使用其他方式来处理网格视图标题部分的搜索过滤条件。它很容易在您的代码中使用工具。这是没有数据库使用的概念,但我在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;
答案 5 :(得分:0)
像这样实现搜索按钮的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();
}