没有数据重新绑定的asp.net gridview排序

时间:2008-11-18 00:47:50

标签: asp.net gridview

我正在尝试使用存储过程作为数据源进行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启用了viewstate。在按下列标题时,会发生回发,但不会进行排序。如果有人有一个简单的解决方案,请让我知道甚至更好的ajax排序,这将避免回发会更好。数据集相对较小,但查询需要很长时间,这就是为什么我不想在每种类型上重新查询。

3 个答案:

答案 0 :(得分:4)

如果你没有分页结果,只是做一个阅读,那么像jquery tablesorter插件这样的东西将是一个快速简单的解决方案。我已经在最多1400行的表格上使用它并且工作得很好,尽管〜>在缓慢的putas上几百可能更好。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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