SqlDataSource在分页期间丢失了where子句

时间:2017-06-14 10:18:05

标签: sql asp.net vb.net

我有SqlDataSource这个查询:

SELECT [ProductName], [Debscription], [Price] FROM [MyDb] WHERE ([Date1] >= @Date1) ORDER BY [ProductName]">

当我加载页面时,它工作正常,只向我显示我想要的产品。 当我尝试更改GridView的页面时,例如,转到第2页,它会刷新页面并在where子句丢失时生成大量页面索引。

我该如何解决这个问题?

我认为该声明已自动保存,但事实并非如此。

如何在分页期间保存where子句?

2 个答案:

答案 0 :(得分:1)

对于动态分页,您应该使用ObjectDataSource而不是SqlDataSource。

答案 1 :(得分:1)

如果希望网格处理分页,请将其绑定到DataTable或DataSet。例如:

private void Page_Load(object sender, System.EventArgs e)
{
   if (!Page.IsPostBack)
       BindData();
}

private void BindData()
{
    // Connect to the Database
    SqlConnection myConnection = new SqlConnection(connection string);

    // Retrieve the SQL query results and bind it to the DataGrid
    string SQL_QUERY = "SELECT ProductName, UnitPrice, UnitsInStock " +
                  "FROM Products";
    SqlCommand myCommand = new SqlCommand(SQL_QUERY, myConnection);

    // Use a DataTable – required for default paging
    SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand);

    DataTable myTable = new DataTable();
    myAdapter.Fill(myTable);

    dgProducts.DataSource = myTable;
    dgProducts.DataBind();
    myConnection.Close();
}

https://msdn.microsoft.com/en-us/library/aa479006.aspx