0

我正在尝试使 gridview 可排序,它使用存储过程作为数据源,我不希望它每次都重新运行查询来实现这一点。我如何让它工作我当前的代码是:

protected override void OnPreRender(EventArgs e)
{
    if (!IsPostBack)
    {
    SqlCommand cmd2 = new SqlCommand("SR_Student_Course_List", new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RDCV2ConnectionString"].ConnectionString));
    try
    {
        cmd2.CommandType = CommandType.StoredProcedure;
        cmd2.CommandTimeout = 120;
        cmd2.Parameters.Add("student_id", SqlDbType.Char, 11).Value = student;
        cmd2.Connection.Open();
        grdCourses.DataSource = cmd2.ExecuteReader();
        grdCourses.DataSourceID = string.Empty;
        grdCourses.DataBind();
    } finally
    {
        cmd2.Connection.Close();
        cmd2.Connection.Dispose();
        cmd2.Dispose();
    }}}

此代码仅在不是回发时绑定数据,gridview 启用了视图状态。在按下列标题时,会发生回发,但不会发生排序。如果有人对此有一个简单的解决方法,请告诉我,甚至更好的 ajax 排序可以避免回发会更好。数据集相对较小,但是查询需要很长时间,这就是为什么我不想在每个排序上重新查询。

4

3 回答 3

4

如果您没有对结果进行分页,而只是进行读取,那么像 jquery tablesorter 插件之类的东西将是一个快速而简单的修复。我已经在多达 1400 行的表上使用了它并且效果很好,虽然 ~> 几百可能在慢速 putas 上更好。

如果 gridview 是可编辑的,那么如果您没有正确注册客户端脚本等,aspnet 事件/输入验证可能会吐出一个假人。

于 2008-11-18T01:47:56.173 回答
0

您可以尝试将数据存储在视图状态(或缓存)中。

于 2008-11-18T00:50:08.660 回答
0

在您的情况下,我将使用 SqlDataAdapter 并填充 DataTable。然后,将 DataTable 放入 Session 变量中。当 GridView 排序时,检查 Session 变量是否仍然存在。如果没有,则再次填充 DataTable。最后使用 DataView 对 DataTable 进行排序,并将 GridView 与 DataView 重新绑定。

于 2008-11-18T02:26:19.417 回答