2011-05-26 63 views
0
using System; 
using System.Collections.Generic; 
using System.Collections.Specialized; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Configuration; 

using BiscomFax; 


namespace FaxServer 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     public const string vsColumn = "Column"; 
     public const string vsSortDirection = "SortDirection"; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if(!IsPostBack) 
       ViewState[vsColumn] = ""; 
      List_Click(ActivityButton, e); 
     } 

     protected void List_Click(object sender, EventArgs e) 
     { 
      //using (new Impersonator("administrator", "mlabs.com", "100%secure*")) 
      //{ 
       try 
       { 
        Fax fax = new Fax(); 
        ConnObj cnObj = GetConfiguration(); 
        Button btn = (Button)sender; 
        string sort = ""; 

        DataTable dt = new DataTable(); 

        switch (btn.CommandName) 
        { 
         case "Activity": 
          sort = "DateTime"; 
          dt = fax.GetActivityLog(cnObj.faxDir, cnObj.faxUsername, cnObj.faxPassword); 
          break; 
         case "Message": 
          sort = "DateTime"; 
          dt = fax.GetMessageStatus(cnObj.faxDir, cnObj.faxUsername, cnObj.faxPassword); 
          break; 
         case "Pending": 
          sort = "DeliveryTime"; 
          dt = fax.GetPendingList(cnObj.faxDir, cnObj.faxUsername, cnObj.faxPassword); 
          break; 
         default: 
          sort = "DateTime"; 
          dt = fax.GetActivityLog(cnObj.faxDir, cnObj.faxUsername, cnObj.faxPassword); 
          break; 

        } 

        GridView1.DataSource = dt; 
        GridView1.Sort(sort, SortDirection.Descending); 
        GridView1.DataBind(); 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 
      //} 
     } 



     protected void gridView_Sorting(object sender, GridViewSortEventArgs e) 
     { 

      DataTable dt = GridView1.DataSource as DataTable; 

      if (dt != null) 
      { 
       DataView dv = new DataView(dt); 
       string oldSort = ViewState[vsColumn].ToString(); 

       dv.Sort = e.SortExpression + " " + convertSorDirectionToSql(e.SortDirection); 

       if (dv.Sort == oldSort) 
        dv.Sort = e.SortExpression + " " + convertSorDirectionToSql(SortDirection.Descending); 

       ViewState[vsColumn] = dv.Sort; 

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

     } 

我有一個非常困難的時間排序這個gridview的內容,我知道我綁定正確,因爲數據顯示,但數據不會按照日期時間排序。我做錯了什麼?c#asp.net gridview不排序

+0

當我做了排序像在此之前我一直沒能在回發利用GridView的DataSource屬性。我不得不再次從底層數據源獲取數據。您是否嘗試過將「dt」分配給數據集的新副本? – CheckRaise 2011-05-26 18:03:26

+0

我們可以確定問題的唯一方法是,您需要發佈網格視圖的aspx內容 - 尤其是,日期列的模板。 – Hogan 2011-05-26 19:42:30

+0

@hogan別的? – 2011-05-26 19:57:00

回答

2

讓我們看一下這條線

dv.Sort = e.SortExpression + " " + convertSorDirectionToSql(e.SortDirection); 

測試時,當你把一個斷點在此行也e.SortExpression有什麼價值?

+0

@hogan「DateTime」 – 2011-05-26 19:42:07

+0

有趣的是,DateTime是結果集中的一列嗎? – Hogan 2011-05-26 19:42:58

+0

是的,它是///////// – 2011-05-26 19:44:04

1

您的數據綁定是正確的。 這裏是在GridView中排序一篇好文: http://www.mikepope.com/blog/DisplayBlog.aspx?permalink=1418

[更新]

你的代碼中有幾個不一致。您可能需要再次實施。

  1. allowsorting必須是真實的
  2. 每個網格列必須聲明的SortExpression
  3. 您無法讀取數據從GridView的數據源回到
  4. 你需要閱讀在每次回發從你的數據庫中的數據,即排序

這裏是C#一個很好的例子: http://programming.top54u.com/post/ASP-Net-2-0-Gridview-Sorting-Using-C-sharp.aspx

+0

@ibrahim我做錯了什麼 – 2011-05-26 17:54:39

+0

我也有很多麻煩,因爲有很多要注意的地方。但我不記得所有。所以最好像這個例子那樣來避免問題。 – ibram 2011-05-26 17:58:12

+0

即時通訊使用c#不是vb – 2011-05-27 14:52:34

0

您可以通過設置屬性datatable.defaultview.sort對數據表進行排序。不知道你是否需要綁定數據表或者之後的datatable.defaultview

-1

只是檢查在GridView控件

它可能是假的aspx頁面上AllowSorting屬性。

請使其爲真,然後檢查排序。

+0

@dot AllowSorting =「True」 – 2011-05-27 14:35:00

0

試試這個代碼

protected void grdList1_Sorting(object sender, GridViewSortEventArgs e) 
{ 
     fillgrid(); 
     string sortstr = e.SortExpression; 
     DataView dview = new DataView(dtable); 
     if (sortstr == "asc") 
      dview.Sort = e.SortExpression + " desc"; 
     else 
      dview.Sort = e.SortExpression + " asc"; 
     grdList1.DataSource = dview; 
     grdList1.DataBind(); 
}