2016-04-10 13 views
0

Gridview'imde sıralama ile ilgili sorunlar yaşıyorum. Her zaman bir Sıralama Sırasıyla, yani Yükseliyor mu? Asla Desc'e geçme!ASP.NET Gridview Sıralama sıralama

Hata ayıklama işlemini yürüttüm ve neyin yanlış gittiğini anlayamıyorum?

İşte benim kodum, sayfalama özelliğini kullanıyorum, bu yüzden düzgün çalışmasını engelliyor olup olmadığından emin değilim?

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    {   
    PopulateProductClass(); 
    PopulateProduct(); 
    } 
    PopulateOrderList(); 
} 

private string ConvertSortDirectionToSql(SortDirection sortDirection) 
{ 
    string newSortDirection = String.Empty; 

    switch (sortDirection) 
    { 
    case SortDirection.Ascending: 
     newSortDirection = "ASC"; 
     break; 

    case SortDirection.Descending: 
     newSortDirection = "DESC"; 
     break; 
    } 
    return newSortDirection; 
} 

protected void gvOrderItems_Sorting(object sender, GridViewSortEventArgs e) 
{ 

    DataTable dt = new DataTable(); 
    dt.Columns.Add("OrderDate", typeof(string)); 
    dt.Columns.Add("OrderNumber", typeof(string)); 
    dt.Columns.Add("OrderItemSKUName", typeof(string)); 
    dt.Columns.Add("SKUNumber", typeof(string)); 
    dt.Columns.Add("OrderItemStatus", typeof(string)); 
    dt.Columns.Add("OrderItemUnitCount", typeof(string)); 
    dt.Columns.Add("mtrx_Code2", typeof(string)); 

    for (int i = 0; i < gvOrderItems.Rows.Count; i++) 
    { 
    DataRow drNew = dt.NewRow(); 
    drNew["OrderDate"] = gvOrderItems.Rows[i].Cells[0].Text; 
    drNew["OrderNumber"] = gvOrderItems.Rows[i].Cells[1].Text.Replace("&nbsp;", ""); 
    drNew["OrderItemSKUName"] = gvOrderItems.Rows[i].Cells[3].Text; 
    drNew["SKUNumber"] = gvOrderItems.Rows[i].Cells[2].Text; 
    drNew["OrderItemStatus"] = gvOrderItems.Rows[i].Cells[6].Text; 
    drNew["OrderItemUnitCount"] = gvOrderItems.Rows[i].Cells[5].Text; 
    drNew["mtrx_Code2"] = gvOrderItems.Rows[i].Cells[4].Text; 
    dt.Rows.Add(drNew); 
    } 

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

    gvOrderItems.DataSource = dataView; 
    gvOrderItems.DataBind(); 
    } 
} 

dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection); e.SortDirection hep Artan olarak gösterir?

<asp:GridView ID="gvOrderItems" runat="server" GridLines="None" CellSpacing="-1" AutoGenerateColumns="false" 
    AllowSorting="true" OnSorting="gvOrderItems_Sorting"> 
    <Columns>        
    <asp:BoundField DataField="OrderDate" HeaderText="Date" SortExpression="OrderDate" /> 
    <asp:BoundField DataField="OrderNumber" HeaderText="Order Number" SortExpression="OrderNumber" /> 
    <asp:BoundField DataField="SKUNumber" HeaderText="Product Number" SortExpression="OrderNumber" /> 
    <asp:BoundField DataField="OrderItemSKUName" HeaderText="Product Description" /> 
    <asp:BoundField DataField="mtrx_Code2" HeaderText="Size" /> 
    <asp:BoundField DataField="OrderItemUnitCount" HeaderText="OTY" /> 
    <asp:BoundField DataField="OrderItemStatus" HeaderText="Status" />   
    </Columns> 
</asp:GridView> 

GÜNCELLEME

...... Ben SO GridView sorting: SortDirection always Ascending soru baktı ve bu benim Sıralama olay modifiye Kostrzak bazı tavsiyeler sonra Tamam Page Load günü

protected void gvOrderItems_Sorting(object sender, GridViewSortEventArgs e) 
{ 

    DataTable dt = new DataTable(); 
    dt.Columns.Add("OrderDate", typeof(string)); 
    dt.Columns.Add("OrderNumber", typeof(string)); 
    dt.Columns.Add("OrderItemSKUName", typeof(string)); 
    dt.Columns.Add("SKUNumber", typeof(string)); 
    dt.Columns.Add("OrderItemStatus", typeof(string)); 
    dt.Columns.Add("OrderItemUnitCount", typeof(string)); 
    dt.Columns.Add("mtrx_Code2", typeof(string)); 

    for (int i = 0; i < gvOrderItems.Rows.Count; i++) 
    { 
    DataRow drNew = dt.NewRow(); 
    drNew["OrderDate"] = gvOrderItems.Rows[i].Cells[0].Text; 
    drNew["OrderNumber"] = gvOrderItems.Rows[i].Cells[1].Text.Replace("&nbsp;", ""); 
    drNew["OrderItemSKUName"] = gvOrderItems.Rows[i].Cells[3].Text; 
    drNew["SKUNumber"] = gvOrderItems.Rows[i].Cells[2].Text; 
    drNew["OrderItemStatus"] = gvOrderItems.Rows[i].Cells[6].Text; 
    drNew["OrderItemUnitCount"] = gvOrderItems.Rows[i].Cells[5].Text; 
    drNew["mtrx_Code2"] = gvOrderItems.Rows[i].Cells[4].Text; 
    dt.Rows.Add(drNew); 
    } 

    if (dt != null) 
    { 
    if (e.SortExpression == (string)ViewState["SortColumn"]) 
    { 
     // We are resorting the same column, so flip the sort direction 
     e.SortDirection = 
      ((SortDirection)ViewState["SortColumnDirection"] == SortDirection.Ascending) ? 
      SortDirection.Descending : SortDirection.Ascending; 
    } 
    // Apply the sort 
    dt.DefaultView.Sort = e.SortExpression + 
     (string)((e.SortDirection == SortDirection.Ascending) ? " ASC" : " DESC"); 
    ViewState["SortColumn"] = e.SortExpression; 
    ViewState["SortColumnDirection"] = e.SortDirection; 

    gvOrderItems.DataSource = dt; 
    gvOrderItems.DataBind(); 
    } 
} 

Tarih siparişi azalan sırada.

2016-03-08
2016-02-10
2016-01-22
2016-01-22
2016-01-22
2016-01-22
2016-01- 22
2016-01-22
2015-11-11
2015-11-11

gridvie Tarih kolonunda tıkladıktan sonra o Artan sırayla gitmeli w aşağıdaki gibi:

2015-11-11
2015-11-11
2016-01-22
2016-01-22
2016-01-22
2016 -01-22
2016-01-22
2016-01-22
2016-02-10
2016-03-08

Ho o şu sırayla görüntülenir WEVER

2016-03-08
2016-02-10
11/11/2015
11/11/2015
22/01/2016
22/01/2016
22/01/2016
22/01/2016
22/01/2016
22/01/2016

Ben m bu sipariş için ne kadar emin değil mi?

+2

sonra

DataTable dt = new DataTable(); dt.Columns.Add("OrderDate", typeof(string)); dt.Columns.Add("OrderNumber", typeof(string)); dt.Columns.Add("OrderItemSKUName", typeof(string)); dt.Columns.Add("SKUNumber", typeof(string)); dt.Columns.Add("OrderItemStatus", typeof(string)); dt.Columns.Add("OrderItemUnitCount", typeof(string)); dt.Columns.Add("mtrx_Code2", typeof(string)); 

önce sorunu

çözüldü Yani ben SO zaten benzer sorun oluştu typeof(datetime) için typeof(string) saha veri türü değiştirildi: http://stackoverflow.com/questions/250037/gridview-sorting-sortdirection-always-ascending – Kostrzak

+0

Teşekkürler, Kostrzak Soruyu güncelledim. – Kevin

+1

DataTable'ı Sorting olay işleyicinizdeki GridView'dan yeniden doldurmanız mı gerekiyor? PopulateOrderList'i çağırmak aynı şeyi yapamaz mıydı? Başka bir nokta: Tarih, bir dize yerine Tarih alanındaysa, sıralama daha öngörülebilir olurdu. Belki de PopulateOrderList’i çağırmak da bu sorunu çözebilir. – ConnorsFan

cevap

0

Sorun bulundu.ConnorsFan'ın işaret ettiği gibi, OrderDate alanı DateTime alanı yerine bir String olarak ayarlanıyordu. Ben Datatable oluşturulan ve bu

DataTable dt = new DataTable(); 
dt.Columns.Add("OrderDate", typeof(DateTime)); 
dt.Columns.Add("OrderNumber", typeof(string)); 
dt.Columns.Add("OrderItemSKUName", typeof(string)); 
dt.Columns.Add("SKUNumber", typeof(string)); 
dt.Columns.Add("OrderItemStatus", typeof(string)); 
dt.Columns.Add("OrderItemUnitCount", typeof(string)); 
dt.Columns.Add("mtrx_Code2", typeof(string));