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列数据并没有降序排列,这是为什么
...全文
848 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)
内容概要:本文系统研究了多轴同步轨迹规划中的三种主流算法——7段S型、5段S型和多轴梯形轨迹规划,重点阐述其设计思路、运动特性及适用场景。三类算法均采用“独立预规划—基准轴选取—参数比例缩放”的统一同步策略,确保多轴同时启停。7段S型通过加加速度约束实现最优平滑性,适用于超精密设备;5段S型在保留加加速度控制的基础上简化结构,兼顾平滑性与计算效率,广泛应用于通用工业自动化场景;梯形轨迹以三段式结构(加速-匀速-减速)实现极简计算与快速响应,适合低成本、高效率应用。文章对比分析了三者的平滑性、控制复杂度、计算量及工程适用性,为不同精度与成本需求下的系统选型提供理论依据,并展望了未来向智能化、自适应化和轻量化发展的趋势。; 适合人群:具备一定自动化控制或机械电子工程背景,从事运动控制算法研发、工业机器人开发或数控系统设计的研发人员及高校研究生。; 使用场景及目标:①为工业机器人、数控机床、自动化装配线等多轴协同系统提供轨迹规划方案选型依据;②帮助开发者理解不同轨迹算法在平滑性、响应速度与实现难度之间的权衡关系,指导实际工程中控制性能与成本的平衡设计; 阅读建议:此资源侧重于多轴同步控制的工程实现逻辑,建议结合Matlab仿真代码进行实践验证,重点关注各算法的参数缩放机制与同步生成过程,通过对比仿真结果深入掌握其动态特性和应用场景差异。
内容概要:本文基于Matlab代码实现,系统复现并对比了四种先进控制器——深度确定性策略梯度强化学习(DDPG-RL)与线性二次调节器(LQR)结合、Bryson规则与LQR结合、LQR与比例微分(PD)控制结合,以及基础LQR控制,在无人机(UAV)集群轨迹跟踪任务中的性能表现。研究聚焦于控制器在复杂动态环境下的轨迹跟踪精度、响应速度、抗干扰能力及系统稳定性,通过仿真实验定量分析各方法的优劣。DDPG-RL+LQR利用强化学习自适应优化控制策略,具备较强的环境适应性;Bryson规则+LQR通过最优控制理论整定参数,提升动态响应;LQR+PD则增强了系统的阻尼特性以抑制振荡;基础LQR作为基准方法,体现经典最优控制性能。该研究源自一区TOP期刊论文复现,具有较高的学术参考价值。; 适合人群:具备自动控制理论基础、强化学习初步知识及Matlab编程能力,从事无人机控制、智能算法应用或相关领域研究的研究生、科研人员及工程师(工作年限1-3年为佳);; 使用场景及目标:① 掌握先进控制策略在多智能体系统中的建模与仿真方法;② 对比分析传统最优控制与智能控制融合方案在轨迹跟踪中的性能差异;③ 为无人机集群协同控制、自主导航系统设计提供算法选型依据和技术验证手段; 阅读建议:建议结合提供的Matlab代码逐模块调试运行,重点关注控制器设计、状态反馈机制与性能指标计算部分,深入理解算法实现细节,并可通过修改环境参数或引入外部扰动进一步拓展实验,以全面掌握各控制器的适应边界与优化潜力。
内容概要:本文基于强化学习与优化反步法,研究水面舰艇在复杂海洋环境下的自适应轨迹跟踪控制问题。通过构建非线性动力学模型,结合强化学习的在线学习能力与反步法的系统化控制设计优势,提出一种能够应对模型不确定性、外部干扰及动态环境变化的鲁棒自适应控制策略。研究采用Lyapunov稳定性理论保证系统收敛性,并通过Matlab仿真验证所提方法在轨迹跟踪精度、抗干扰能力及自适应调节性能方面的优越表现,复现了一区顶级期刊(IEEE Transactions)级别的研究成果,具有较强的学术参考价值和技术可行性。; 适合人群:具备自动控制理论、非线性系统分析基础,熟悉Matlab/Simulink仿真环境,从事船舶控制、智能控制、强化学习应用等方向的研究生、科研人员及工程技术人员(建议具备1年以上相关研究经验)。; 使用场景及目标:① 学习并掌握强化学习与反步控制相结合的设计思路与实现方法;② 复现高水平期刊论文中的先进控制算法;③ 应用于水面无人艇(USV)、自动驾驶船舶等智能航海装备的轨迹跟踪控制系统开发与优化;④ 为非线性系统自适应控制、智能控制算法融合提供技术借鉴。; 阅读建议:建议结合反步法、强化学习、Lyapunov稳定性等基础知识同步学习,重点理解控制器设计的递推过程与自适应律构建机制,并动手调试Matlab代码以加深对算法细节和参数调节规律的理解。

111,127

社区成员

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

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

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