DataTable 排序问题

tonydongYIYI 2011-12-30 09:44:40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace MdyTest
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = GetDataTable();
ViewState["DataTable"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}
}

private DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("A",typeof(int));
for (int i = 1; i <= 50; i++)
{
DataRow dr = dt.NewRow();
dr["A"] = i;
dt.Rows.Add(dr);
}
return dt;
}

protected void btnRandom_Click(object sender, EventArgs e)
{
DataTable dt = ViewState["DataTable"] as DataTable;
ViewState["DataTable"] = GetRandomDataTable(dt, "A");
GridView1.DataSource = ViewState["DataTable"] as DataTable;
GridView1.DataBind();
}

#region 生成随机的DataTable
/// <summary>
/// 生成随机的DataTable
/// </summary>
/// <param name="dt"></param>
/// <param name="columnName"></param>
/// <returns></returns>
private DataTable GetRandomDataTable(DataTable dt,string columnName)
{
List<int> list = GetRandomList(dt.Rows.Count);
if (columnName == "A")
{
for (int i = 0; i < list.Count; i++)
{
dt.Rows[i]["A"] = list[i];
}
}
else if (columnName == "B")
{
for (int i = 0; i < list.Count; i++)
{
dt.Rows[i]["B"] = list[i];
}
}
return dt;
}
#endregion

protected void btnAddColumn_Click(object sender, EventArgs e)
{
DataTable dt = ViewState["DataTable"] as DataTable;
dt.Columns.Add("B",typeof(int));
ViewState["DataTable"] = GetRandomDataTable(dt, "B");
GridView1.DataSource = ViewState["DataTable"] as DataTable;
GridView1.DataBind();
}

protected void btnDesc_Click(object sender, EventArgs e)
{
DataTable dt = ViewState["DataTable"] as DataTable;
DataTable newDt = new DataTable();
newDt = dt.Clone();//拷贝表dt结构到新表newDt
for (int i = 0; i < dt.Rows.Count; i++)
{
newDt.ImportRow(dt.Rows[i]);
}
newDt.DefaultView.Sort = "A desc,B desc";
GridView1.DataSource = newDt;
GridView1.DataBind();
}

#region 生成不重复的随机List集合
/// <summary>
/// 生成不重复的随机List集合
/// </summary>
/// <param name="codeLength"></param>
/// <returns></returns>
private List<int> GetRandomList(int codeLength)
{
List<int> randList = new List<int>();
int i = 0;
Random random = new Random();
while (i < codeLength)
{
int randomNumber = random.Next(1, codeLength+1);
if (!randList.Contains(randomNumber))
{
i++;
randList.Add(randomNumber);
}
}
return randList;
}
#endregion

}
}


newDt.DefaultView.Sort = "A desc,B desc";
最后B列数据并没有降序排列,这是为什么
...全文
801 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
advisd 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

DataView dv = newDt.DefaultView;
dv.Sort = "A desc,B desc";
DataTable newTable = dv.ToTable();

这样试试看
[/Quote]
public DataTable GetTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("凭证号");
dt.Columns.Add("名称");
dt.Columns.Add("序号");

DataRow row1 = dt.NewRow();
row1["凭证号"] = "1";
row1["名称"] = "3";

DataRow row2 = dt.NewRow();
row2["凭证号"] = "1";
row2["名称"] = "3";

DataRow row3 = dt.NewRow();
row3["凭证号"] = "2";
row3["名称"] = "2";

DataRow row4 = dt.NewRow();
row4["凭证号"] = "2";
row4["名称"] = "2";

DataRow row7 = dt.NewRow();
row7["凭证号"] = "2";
row7["名称"] = "1";

DataRow row6 = dt.NewRow();
row6["凭证号"] = "2";
row6["名称"] = "5";

DataRow row5 = dt.NewRow();
row5["凭证号"] = "3";
row5["名称"] = "1";

dt.Rows.Add(row1);
dt.Rows.Add(row5);
dt.Rows.Add(row4);
dt.Rows.Add(row3);
dt.Rows.Add(row2);
dt.Rows.Add(row6);
dt.Rows.Add(row7);

return dt;
}

protected void Page_Load(object sender, EventArgs e)
{
DataTable dt1 = GetTable();

DataView dv1 = dt1.DefaultView;
dv1.Sort = " 凭证号 ASC,名称 ASC ";

DataTable dt4 = dt1.Clone();
for (int i = 0; i < dv1.Count; i++)
{
DataRow dr=dt4.NewRow();
for (int j = 0; j < dv1[i].Row.ItemArray.Length; j++)
{
dr[j] = dv1[i][j];
}
dt4.Rows.Add(dr);
}
//dt4为排序后的表

}
advisd 2012-06-27
  • 打赏
  • 举报
回复
自己算出来。
jxj0115 2011-12-30
  • 打赏
  • 举报
回复
排序只能以一列为主呵,B的降序只是辅助的,A相同的情况下才会再按B来降序
之握成 2011-12-30
  • 打赏
  • 举报
回复
jxj0115 2011-12-30
  • 打赏
  • 举报
回复
怎么可能AB同时降序呢,那样的数据怎么排序额
jxj0115 2011-12-30
  • 打赏
  • 举报
回复
本来就是这样的,A降序,B是在A相同的情况下才会降序的
tonydongYIYI 2011-12-30
  • 打赏
  • 举报
回复
顶,没有能够解决吗?
tonydongYIYI 2011-12-30
  • 打赏
  • 举报
回复
我查了下DataTable Select方法,
Select("过滤条件","排序列")
Select("1=1","A desc,B desc")
这样调用,但是B列还是没有降序
这个太诡异了吧。。。。
tonydongYIYI 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 happy09li 的回复:]
newDt.select("1=1 order by A,B desc")
[/Quote]

语法错误:“order”运算符后缺少操作数
熙风 2011-12-30
  • 打赏
  • 举报
回复
newDt.select("1=1 order by A,B desc")
qldsrx 2011-12-30
  • 打赏
  • 举报
回复
问:eval1003
http://006sf.com/是什么网站
你也不用这么做广告啊,把网址混在文字里面,让别人误点。
tonydongYIYI 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yibey 的回复:]
DataView dv = newDt.DefaultView;
dv.Sort = "A desc,B desc";
DataTable newTable = dv.ToTable();

这样试试看
[/Quote]

还是不行啊,A是降序的,B随机
yibey 2011-12-30
  • 打赏
  • 举报
回复
DataView dv = newDt.DefaultView;
dv.Sort = "A desc,B desc";
DataTable newTable = dv.ToTable();

这样试试看

missgd152 2011-12-30
  • 打赏
  • 举报
回复

设置排序要同时设置。
tonydongYIYI 2011-12-30
  • 打赏
  • 举报
回复
自己顶一下。。。。
tonydongYIYI 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lovesongforever 的回复:]
你指定A 和B同时降序, A按着降序排了吗?
[/Quote]
A列降序排列的,B列还是随机的
garfieldzf 2011-12-30
  • 打赏
  • 举报
回复
你指定A 和B同时降序, A按着降序排了吗?
qldsrx 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 q107770540 的回复:]
引用 20 楼 happy09li 的回复:
DataRow[] dr = newDt.Select("1=1", "A,B desc");

这种情况下是:
orderby a asc ,b desc了吧?
[/Quote]
对,以下是MSDN上的示例:
private void SortByTwoColumns()
{
// Get the DefaultViewManager of a DataTable.

DataView view = DataTable1.DefaultView;

// By default, the first column sorted ascending.

view.Sort = "State, ZipCode DESC";
}

By default, the first column sorted ascending.
熙风 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 q107770540 的回复:]
引用 20 楼 happy09li 的回复:
DataRow[] dr = newDt.Select("1=1", "A,B desc");

这种情况下是:
orderby a asc ,b desc了吧?
[/Quote]

写错了。。。
熙风 2011-12-30
  • 打赏
  • 举报
回复
DataRow[] dr = newDt.Select("1=1", "A desc,B desc");



加载更多回复(5)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧