2008-11-18 75 views
0

我想做一個gridview排序,它使用存儲過程作爲數據源,我不希望它每次重新運行查詢來實現此目的。我將如何得到它的工作我當前的代碼是:asp.net 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

如果你不是分頁的結果,只是做一個閱讀,那麼類似jQuery的tablesorter插件將是一個快速和簡單的修復。我已經在1400行的桌子上使用過它,並且效果很好,但在緩慢的putas上可能會更好。

如果GridView控件可編輯,則ASPNET事件/輸入驗證可能吐出一個虛擬如果你不經過客戶端腳本等

+0

使用jquery table sorter工作很棒,我的數據集輸出最多隻有20行,因爲它是聚合數據,所以很長一段時間才能計算它。 – PeteT 2008-11-18 18:36:29

0

您可以嘗試將數據存儲在視圖狀態(或緩存)中。

0

就您的情況進行適當登記,我會用一個SqlDataAdapter並填寫一個DataTable。然後,將DataTable放入Session變量中。當GridView排序時,檢查Session變量是否仍然存在。如果沒有,則再次填充DataTable。最後使用DataView對DataTable進行排序,並使用DataView重新綁定GridView。