使用SqlDataSource进行搜索

时间:2015-08-14 17:16:32

标签: c# html sql asp.net gridview

我正在尝试使用sqldatasource在GridView中使用文本框进行搜索,并启用编辑更新分页;但是,在我单击 update 成功搜索后,过滤后的GridView没有显示整个GridView,每个数据都显示出来。谢谢,请指教。

Aspx.cs页面:

binaryoperation.count != 0

Html页面:

binaryoperation.count == 1

1 个答案:

答案 0 :(得分:0)

您正在从此行的str.length()控件中离开GridView控件的数据源:

SqlDataSource

由于在GridView1.DataSourceID = null; 方法中您执行的查询没有BindData()子句,因此返回所有要绑定到网格的行,如下所示:

WHERE

这有效地破坏了您的搜索条件,因为没有条件(protected void BindData() { using (SqlConnection sqlCon = new SqlConnection(ConnString)) { using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = "SELECT * FROM [Inventory]"; cmd.Connection = sqlCon; sqlCon.Open(); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); GridView1.DataSourceID = null; GridView1.DataSource = dt; GridView1.DataBind(); sqlCon.Close(); }//end using }//end using } 子句)应用于SQL查询。

您需要WHERE控制SqlDataSource支持"搜索"价值而没有。这样做的一种方法是:

SelectCommand

SelectCommand="SELECT * FROM [Inventory] WHERE ([Type] = @Type OR [Type] = '')" 逻辑添加到OR子句中将不会过滤掉任何行(假设您的WHERE值都不为空并且当您省略搜索时(即,搜索文本框)。

就个人而言,我会创建一个返回Type对象的方法,并在搜索条件中传递,根据是否搜索"来构建两个单独的SQL语句。字符串是空的或不是,像这样:

DataTable

现在,您可以让private DataTable GetData(string searchTerm) { DataTable dt = null; // Check to see if search term is null or empty if(!string.IsNullOrEmpty(searchTerm) { // Build SQL statement with WHERE clause using (SqlConnection sqlCon = new SqlConnection(ConnString)) { using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = "SELECT * FROM [Inventory] WHERE [Type] = @searchTermParameter"; cmd.Parameters.Add(new SqlParameter("@searchTermParameter", searchTerm)); cmd.Connection = sqlCon; sqlCon.Open(); SqlDataAdapter da = new SqlDataAdapter(cmd); dt = new DataTable(); da.Fill(dt); }//end using }//end using } else { // Build SQL statement without WHERE clause, // because we are not searching for anything using (SqlConnection sqlCon = new SqlConnection(ConnString)) { using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = "SELECT * FROM [Inventory]"; cmd.Connection = sqlCon; sqlCon.Open(); SqlDataAdapter da = new SqlDataAdapter(cmd); dt = new DataTable(); da.Fill(dt); }//end using }//end using } return dt; } 方法接受DataBind对象,其唯一责任是将数据绑定到DataTable控件,如下所示:

GridView