2011-03-08 49 views
3

具體的例子我指的是排序gridview的是這個網站如何使用下拉列表

http://www.iamextreme.net/category.php?CategoryId=1&SubCategoryId=0&SortBy=name

通知排序下拉列表。基本上我想根據價格,名稱,人氣排序產品?

我必須重新查詢數據庫並再次在gridview中檢索排序的數據,或者我應該已經在GridView中對已存在的項目進行排序?

我試過這個,但它的錯誤方法,基本上我試圖重新填充頁面加載事件,這是給錯誤的數據。

現在什麼是正確的方法。

回答

3

你可能有這樣的事情在DropDownList的SelectIndexChanged事件

protected void DropDownList1_SelectIndexChanged(object sender, EventArgs e) 
     { 
      gvSorting.Sort(DropDownList1.SelectedValue, SortDirection.Ascending); 
     } 

和處理GridView的Sorting事件

protected void gvSorting_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    DataTable dtSortTable = gvSorting.DataSource as DataTable; 
    if (dtSortTable != null) 
    { 
     DataView dvSortedView = new DataView(dtSortTable); 
     dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection); 
     gvSorting.DataSource = dvSortedView; 
     gvSorting.DataBind(); 
    } 
} 

private static string getSortDirectionString(SortDirection sortDireciton) 
{ 
    string newSortDirection = String.Empty; 
    if (sortDireciton == SortDirection.Ascending) 
    { 
     newSortDirection = "ASC"; 
    } 
    else 
    { 
     newSortDirection = "DESC"; 
    } 
    return newSortDirection; 
} 
1

您不應該重新查詢數據庫,但總體來說可能會更好(以確保在用戶瀏覽時新的內容進入結果)。

我會響應一個事件(在示例中它將在DropDownList上爲SelectedValueChanged)並在那裏進行排序。我將對一個集合進行排序,您可以將它保留在Session中或每次重新查詢,然後設置GridView的DataSource並重新綁定。