Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Gridview排序未排序_C#_Asp.net_Gridview - Fatal编程技术网

C# ASP.NET Gridview排序未排序

C# ASP.NET Gridview排序未排序,c#,asp.net,gridview,C#,Asp.net,Gridview,我在Gridview上的排序有问题。它似乎总是按一种顺序排列,即升序?从不切换到Desc 我已经完成了调试过程,无法找出哪里出了问题 这是我的代码,我也在使用分页,所以我不确定它是否会阻止它正常工作 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { PopulateProductClass(); PopulateProduct(); } Populat

我在Gridview上的排序有问题。它似乎总是按一种顺序排列,即升序?从不切换到Desc

我已经完成了调试过程,无法找出哪里出了问题

这是我的代码,我也在使用分页,所以我不确定它是否会阻止它正常工作

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();
  }
}
更新

好的,在Kostrzak提出一些建议后,我查阅了SO问题,并将我的排序事件修改为

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();
  }
}
protectedvoid gvordItems\u排序(对象发送方、GridViewSortEventArgs e)
{   
DataTable dt=新的DataTable();
添加(“OrderDate”,typeof(string));
添加(“订单号”,类型(字符串));
添加(“OrderItemSKUName”,typeof(string));
dt.Columns.Add(“SKUNumber”,typeof(string));
添加(“OrderItemStatus”,typeof(string));
添加(“OrderItemUnitCount”,typeof(string));
添加(“mtrx_代码2”,类型(字符串));
对于(int i=0;i
页面加载
上,日期顺序为降序

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

单击gridview中的日期列后,应按如下升序排列:

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

但是,它将按以下顺序显示

2016-03-08
2016-02-10
2015年11月11日
2015年11月11日
2016年1月22日
2016年1月22日
2016年1月22日
2016年1月22日
2016年1月22日
2016年1月22日


我真的不确定它是如何达到这个顺序的???

发现了问题。正如ConnorsFan指出的,OrderDate字段被设置为字符串,而不是
DateTime
字段。因此,在创建数据表时,我将字段数据类型从
typeof(string)
更改为
typeof(datetime)
,从而解决了问题

以前

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));
之后


在SO上已经有类似的问题:谢谢,Kostrzak,我已经更新了这个问题。您需要在排序事件处理程序中从GridView重新填充DataTable吗?调用
PopulateOrderList
不会有同样的效果吗?另一点:如果日期在日期字段而不是字符串中,排序将更容易预测。也许调用
PopulateOrderList
也可以解决这个问题。“PopulateOrderList”获取数据表中的数据,然后将其添加到pds(PagedDataSource)方法中。但是,从gridview访问当前数据不应该是一个问题吗?我不确定你的最后一点是什么?我只是觉得从GridView重新加载数据而不是从源代码获取数据很奇怪。至于我的最后一点,我认为如果您从源代码获取数据,
OrderDate
将是一个日期字段,而不是字符串字段,这将有助于正确排序数据。
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));
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));