2010-10-19 95 views
2

我有一個gridview綁定數據源,我不得不爲這個gridview添加排序;我在下面添加了代碼,但是效果不好。排序gridview

private string ConvertSortDirectionToSql(SortDirection sortDireciton) 
{ 
    string m_SortDirection = String.Empty; 

    switch (sortDireciton) 
    { 
     case SortDirection.Ascending: 
      m_SortDirection = "ASC"; 
      break; 

     case SortDirection.Descending: 
      m_SortDirection = "DESC"; 
      break; 
    } 

    return m_SortDirection; 
} 

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    DataTable m_DataTable = GridView1.DataSource as DataTable; 

    if (m_DataTable != null) 
    { 
     DataView m_DataView = new DataView(m_DataTable); 
     m_DataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection); 

     GridView1.DataSource = m_DataView; 
     GridView1.DataBind(); 
    } 
} 
+1

什麼是錯誤? – FosterZ 2010-10-19 09:15:55

+0

這是什麼問題,你越來越多了?你怎麼能說它運作不好? – 2010-10-19 09:25:23

+0

對不起,它沒有任何錯誤,但它沒有工作 – Myworld 2010-10-19 09:40:06

回答

1

你可以使用這個,因爲我有同樣的問題,我就這樣解決它。

public string SortingExpression 
{ 
    get 
    { 
     if (this.ViewState["SortExpression"] == null) 
      return ""; 
     else 
      return (string)this.ViewState["SortExpression"]; 
    } 

    set 
    { 
     this.ViewState["SortExpression"] = value; 
    } 
} 

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    DataTable m_DataTable = GridView1.DataSource as DataTable; 

    if (m_DataTable != null) 
    { 
     DataView m_DataView = new DataView(m_DataTable); 
     SortingExpression = e.SortExpression + " " + (SortingExpression.Contains("ASC") ? "DESC" : "ASC"); 
     m_DataView.Sort =SortingExpression; 

     GridView1.DataSource = m_DataView; 
     GridView1.DataBind(); 
    } 
} 
+0

它沒有工作但是,當我在GridView1_Sorting上創建斷點時,我在表中有空數據,並且當我散列if(m_DataTable!= null)時,此錯誤apear(DataTable必須在使用DataView之前設置) – Myworld 2010-10-19 12:23:57

1

也許this可以幫助如果你的sortdirection總是上升。

1

試試看。這種方法適用於我。

dt是包含這些值的數據表。

protected void onSorting_Gridview1(object sender, GridViewSortEventArgs e) 
      { 
       string _sortDirection = dir.ToString(); 
       if(_sortDirection.Equals("Ascending")) 
       { 
       _sortDirection = "ASC"; 
       dir = SortDirection.Descending; 

      } 
      else 
      { 
       _sortDirection="DESC"; 
       dir = SortDirection.Ascending; 

      } 

      if (dt != null) 
      { 
       //Sort the data. 
       dt.DefaultView.Sort = e.SortExpression + " " + _sortDirection; 
       gridView1.DataSource = dt; 
       gridView1.DataBind(); 
      } 

     } 


public SortDirection dir 
    { 
     get 
     { 
      if (ViewState["DIR"] == null) 
      { 
       ViewState["DIR"] = SortDirection.Ascending; 
      } 
      return (SortDirection)ViewState["DIR"]; 
     } 
     set 
     { 
      ViewState["DIR"] = value; 
     } 
    }