2010-10-11 28 views
1

我有網格視圖,我添加了屬性允許在其中排序,我將網格視圖中的所有字段轉換爲項目模板,之後出現此錯誤(GridView'GridView1'觸發了事件排序, t處理) 請任何人幫我 。在GridView中排序字段時出錯

'> '> '> '> '> '> '> '> 「> '> '> '> '> 「>

回答

0

如果沒有綁定你的GridView到SqlDataSource和你的AllowSorting設置爲true,你需要做的手工分揀。您需要將排序事件分配給GridView,並編寫自己的代碼來實現排序。你可以參考下面的代碼,並做相應的修改。


在aspx頁面:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
    onsorting="GridView1_Sorting"> 
</asp:GridView> 


在代碼隱藏:

public partial class GridViewSort : System.Web.UI.Page 
{ 
    private const string ASCENDING = " ASC"; 
    private const string DESCENDING = " DESC"; 

    public SortDirection GridViewSortDirection 
    { 
     get 
     { 
      if (ViewState["sortDirection"] == null) 
       ViewState["sortDirection"] = SortDirection.Ascending; 

      return (SortDirection)ViewState["sortDirection"]; 
     } 
     set { ViewState["sortDirection"] = value; } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Page.IsPostBack) 
      return; 

     GridView1.DataSource = GetStaff(); 
     GridView1.DataBind(); 
    } 


    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
    { 

     string sortExpression = e.SortExpression; 

     if (GridViewSortDirection == SortDirection.Ascending) 
     { 
      GridViewSortDirection = SortDirection.Descending; 
      SortGridView(sortExpression, DESCENDING); 
     } 
     else 
     { 
      GridViewSortDirection = SortDirection.Ascending; 
      SortGridView(sortExpression, ASCENDING); 
     } 
    } 

    private void SortGridView(string sortExpression, string direction) 
    { 
     DataTable dt = GetStaff(); 

     DataView dv = new DataView(dt); 
     dv.Sort = sortExpression + direction; 

     GridView1.DataSource = dv; 
     GridView1.DataBind(); 
    } 

    /// <summary> 
    /// Dummy data 
    /// </summary> 
    /// <returns></returns> 
    private DataTable GetStaff() 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("ID", typeof(int)); 
     dt.Columns.Add("Name", typeof(string)); 
     dt.Columns.Add("Age", typeof(int)); 

     for (int i = 1; i <= 20; i++) 
     { 
      dt.Rows.Add(i, "Staff - " + i, 20); 
     } 

     return dt; 
    } 
}