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(" ", "");
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(" ", "");
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?
sonra
önce sorunu
çözüldü Yani ben SO zaten benzer sorun oluştu
typeof(datetime)
içintypeof(string)
saha veri türü değiştirildi: http://stackoverflow.com/questions/250037/gridview-sorting-sortdirection-always-ascending – KostrzakTeşekkürler, Kostrzak Soruyu güncelledim. – Kevin
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