2010-03-22 66 views
1

我想按未綁定到任何數據庫字段的模板列對Gridview行進行排序。這個模板coulmn只是一個標籤,其中的文本是我在代碼中設置的,取決於數據綁定的不同列中的值。所以我堅持如何設置sortExpression,因爲它沒有鏈接到列。如何按未綁定的Template列對Gridview行進行排序

回答

0

您的預期行爲是可能的。這裏是你需要做的:

1)訂閱GridView的排序事件。
2)添加SortExpression到你的創建列,如「MyOwnSortExpression」。 2)在事件處理程序中,您可以通過EventArgs訪問SortExpression。 e.SortExpression 3)創建一個在GridView上執行DataBinding的方法。 該方法有2個參數。第一個是應該排序的列的名稱,第二個是Sortdirection。 (在點擊相同的列兩次後切換排列方向會很好) 4)添加只在所需Columsn上手動排序的代碼開關。

protected void gv_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    if(e.SortExpression == MyOwnSortExpression) 
    { 
    UpdateDataBinding(e.SortExpression, e.SortDirection); 
    e.Cancel = true; 
    return; 
    } 
} 

protected void UpdateDataBinding(String sortexpression, SortDirection direction) 
{ 
    switch(sortExpression) 
    { 
    case "MyOwnSortExpression": 
     var myData = GetYouSpecificDataFromDB(); 
     if(direction == SortDirection.Ascending) 
     { 
     var = var.OrderBy(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression); 
     } 
     else 
     { 
     var = var.OrderByDescending(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression); 
     } 
     this.gv.DataSource = var.ToList(); 
     this.gv.DataBind(); 
     break; 
    } 
} 

可以爲sortdirection和排序列啓用的反覆機制添加緩存。

您的解決方案可能會有所不同,基於那種數據綁定你正在做的(LINQ到SQL,ObjectDataSource控件,...)

此鏈接http://blogs.sftsrc.com/stuart/archive/2009/02/19/130.aspx還提供了一個很好的類。如果您可以創建一個Wrapperclass,並且包含要顯示的所有值,則效果最佳。我建議的解決方案不需要包裝類,但它缺乏靈活性。

相關問題