我正在尝试使用存储过程作为数据源进行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排序,这将避免回发会更好。数据集相对较小,但查询需要很长时间,这就是为什么我不想在每种类型上重新查询。
答案 0 :(得分:4)
如果你没有分页结果,只是做一个阅读,那么像jquery tablesorter插件这样的东西将是一个快速简单的解决方案。我已经在最多1400行的表格上使用它并且工作得很好,尽管〜>在缓慢的putas上几百可能更好。
如果gridview是可编辑的,那么如果您没有正确注册客户端脚本等,则aspnet事件/输入验证可能会吐出虚拟对象。
答案 1 :(得分:0)
您可以尝试将数据存储在视图状态(或缓存)中。
答案 2 :(得分:0)
在您的情况下,我将使用SqlDataAdapter并填充DataTable。然后,将DataTable放入Session变量中。当GridView进行排序时,检查Session变量是否仍然存在。如果没有,则再次填充DataTable。最后使用DataView对DataTable进行排序,并使用DataView重新绑定GridView。