【问题标题】:asp.net gridview sort without data rebind没有数据重新绑定的asp.net gridview排序
【发布时间】:2008-11-18 00:47:49
【问题描述】:

我正在尝试使 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 排序可以避免回发会更好。数据集相对较小,但是查询需要很长时间,这就是为什么我不想在每个排序上重新查询。

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

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

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

    【讨论】:

    • 使用 jquery 表排序器效果非常好,我的数据集输出最多只有 20 行,因为它是聚合数据,所以计算它需要很长时间。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多