【问题标题】:Sort a datatable but keep rows containing 0 always at bottom对数据表进行排序,但始终将包含 0 的行保留在底部
【发布时间】:2013-11-04 03:53:08
【问题描述】:

远程服务正在返回未排序的数据集。 表格列是“标题”、“作者”、“版本”、“价格” 有人告诉我们,如果价格为 0,则该书“缺货”。

我通过将其转换为 DataView 然后对 dataview 排序然后绑定 gridview 来实现排序功能。

每个想法都可以,除非按价格排序,所有 0 价格都排在最前面。我怎样才能做到这一点?请帮忙。我需要将所有 0 的价格放在底部,然后对价格不为 0 的行进行排序?

编辑:- 当前代码如下

DataTable dt = dtu.Table(q);
             if (dt.Rows.Count>0)
             {
                 searchpanel.Visible = true;
               norecfound.Visible = false;
             }else{searchpanel.Visible = false;
               norecfound.Visible = true;}
            DataTable table = new DataTable();
            table.Columns.Add("BookCode", typeof(string));
            table.Columns.Add("TITLE", typeof(string));
            table.Columns.Add("AUTHOR_NAME", typeof(string));
            table.Columns.Add("EDITION", typeof(string));
            table.Columns.Add("PRICE", typeof(int));
            table.Columns.Add("ldistance", typeof(double));
            //id,TITLE,AUTHOR_NAME,EDITION,PRICE
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                object[] ob = dt.Rows[i].ItemArray;
                table.Rows.Add(ob[0].ToString(), ob[1].ToString(), ob[2].ToString(), ob[3].ToString(), ob[4].ToString(), getcorrespondingdist(ob));
            }
            DataView dataView = new DataView(table);
            if (HiddenField1.Value.Length < 5)
            {
                 if (Request.QueryString["sort"]!=null)
                 {
                      HiddenField1.Value = Request.QueryString["sort"];
                 }
                 else
                 {
                      HiddenField1.Value = " ldistance DESC";
                 }

            }
            dataView.Sort =  HiddenField1.Value;

【问题讨论】:

  • 到目前为止你尝试过什么?发布你的代码
  • 让我们看一些代码。在没有看到任何内容的情况下帮助您修复排序逻辑有点困难。

标签: c# asp.net sorting datatable


【解决方案1】:


我已经为您创建了演示代码,只需将其与您的代码一起使用即可。 假设您的数据在 datatable dt 中。

DataRow[] drnew = dt.Select("Price <> 0");
DataRow[] drzero = dt.Select("Price = 0");
DataTable dtfinal = new DataTable();
if (drnew != null && drnew.Count() > 0)
{
    DataView dv = drnew.CopyToDataTable().DefaultView;
    dv.Sort = "Price Desc";
    dtfinal = dv.Table;
}
if (drzero != null && drzero.Count() > 0)
{
    dtfinal.Merge(drzero.CopyToDataTable());
}

dtfinal 将包含底部价格为 0 的排序数据。
希望对您有所帮助。
谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多