[英]ASP.NET Gridview Sorting not sorting
I am having issues with the sorting on my Gridview. 我在Gridview上的排序有问题。 It always seems to be in one Sort Order ie Ascending?
它似乎总是处于一种排序顺序,即升序? Never switches to Desc?
永远不要切换到Desc?
I have ran through the debug process and cannot figure out where am going wrong? 我已经完成了调试过程,无法弄清楚哪里出了问题?
Here is my code, also am using pagination so I am not sure if it is preventing it from working properly? 这是我的代码,也在使用分页,所以我不确定是否阻止它正常工作?
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 always shows as Ascending? 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 after some advice from Kostrzak I looked up the SO question GridView sorting: SortDirection always Ascending and modified my Sorting event to this...... 在从Kostrzak得到一些建议之后,我确定了GridView排序的SO问题:SortDirection始终升序,并为此修改了Sorting事件……
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();
}
}
On Page Load
the Date order is in the Descending order. 在
Page Load
,日期顺序为降序。
2016-03-08 2016-03-08
2016-02-10 2016-02-10
2016-01-22 2016-01-22
2016-01-22 2016-01-22
2016-01-22 2016-01-22
2016-01-22 2016-01-22
2016-01-22 2016-01-22
2016-01-22 2016-01-22
2015-11-11 2015-11-11
2015-11-11 2015-11-11
After clicking on the Date column in the gridview it should go to Ascending order as follows: 在gridview中单击“日期”列后,应按以下顺序升序:
2015-11-11 2015-11-11
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-01-22 2016-01-22
2016-01-22 2016-01-22
2016-01-22 2016-01-22
2016-02-10 2016-02-10
2016-03-08 2016-03-08
However it is displayed in the following order 但是按以下顺序显示
2016-03-08 2016-03-08
2016-02-10 2016-02-10
11/11/2015 2015年11月11日
11/11/2015 2015年11月11日
22/01/2016 2016/01/22
22/01/2016 2016/01/22
22/01/2016 2016/01/22
22/01/2016 2016/01/22
22/01/2016 2016/01/22
22/01/2016 2016/01/22
I am not really sure how it gets to this order?? 我不太确定如何获得此订单??
Found the problem. 找到了问题。 As ConnorsFan pointed it out the OrderDate field was being set as a String instead of a
DateTime
field. 正如ConnorsFan指出的那样,OrderDate字段被设置为String而不是
DateTime
字段。 So I changed the field datatype from typeof(string)
to typeof(datetime)
when I created the datatable and this resolved the issue 因此,当我创建数据表时,我将字段数据类型从
typeof(string)
更改为typeof(datetime)
,从而解决了该问题
Before 之前
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));
After 后
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.