对数据表进行排序,但将包含0的行始终保持在底部

时间:2013-10-25 06:46:31

标签: c# asp.net sorting datatable

远程服务正在返回未排序的数据集。 表格列是'标题','作者','版本','价格' 我们被告知,如果价格为0,那么这本书就“缺货”。

我正在实现排序功能,方法是将其转换为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;

1 个答案:

答案 0 :(得分:2)


我已经为您创建了演示代码,只需将它与代码一起使用即可。 假设您的数据位于数据表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价格的排序数据 希望它对你有所帮助。
感谢。