我有我的GridView排序問題。它似乎總是在一個排序順序,即升序?切勿切換到Desc?ASP.NET Gridview排序不排序
我已經跑過調試過程,並不知道哪裏會出錯?
這是我的代碼,也使用分頁,所以我不知道它是否阻止它正常工作?
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總是顯示爲升序?
<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>
UPDATE
OK之後,從Kostrzak一些意見,我擡頭一看SO質疑GridView sorting: SortDirection always Ascending和修改我的排序事件給這個......
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();
}
}
在Page Load
的日期訂單按降序排列。
2016年3月8日
2016年2月10日
2016年1月22日
2016年1月22日
2016年1月22日
2016年1月22日
2016-01- 22
2016年1月22日
2015年11月11日
2015年11月11日
點擊日期列在gridvie後w ^它應該去升序如下:
2015年11月11日
2015年11月11日
2016年1月22日
2016年1月22日
2016年1月22日
2016 -01-22
2016年1月22日
2016年1月22日
2016年2月10日
2016年3月8日
何wever它顯示在下面的順序
2016年3月8日
2016年2月10日
2015年11月11日
2015年11月11日
22/01/2016
22/01/2016
22/01/2016
22/01/2016
22/01/2016
22/01/2016
我一個米真不知道它是如何得到這個訂單?
後有對SO已經類似的問題:HTTP:/ /stackoverflow.com/questions/250037/gridview-sorting-sortdirection-always-ascending – Kostrzak
謝謝,Kostrzak我已經更新了這個問題。 – Kevin
您是否需要在Sorting事件處理程序中從GridView中填充DataTable?調用'PopulateOrderList'不會做同樣的事情嗎?另一點:如果日期位於日期字段而不是字符串,排序將更具可預測性。也許調用'PopulateOrderList'也可以解決這個問題。 – ConnorsFan