dataTabel转成dataview插入列后排序
if (!string.IsNullOrEmpty(strQuyu) && !string.IsNullOrEmpty(strZuhao))
{
string[] param = {
};
dt = proB.GetProcedureTable("pro_jetj", param, "pro_jetj");
} dt.Columns.Add("C");
//循环加入一列的数据
foreach (DataRow row in dt.Rows)
row["C"] = row["countMoneySg"].ToString() + row["countMoneySj"].ToString() + row["countMoneyYF"].ToString() + row["countMoneyJJ"].ToString(); DataView dv = dt.DefaultView;
dv.Sort = "C"; rpt_Jepm.DataSource = dt;
rpt_Jepm.DataBind();
dt_tj = proB.GetProcedureTable("pro_GetCgl", param, "pro_GetCgl"); //此处把成功率加进来,即加五个列
dt_tj.Columns.Add("A");
dt_tj.Columns.Add("B");
dt_tj.Columns.Add("C");
dt_tj.Columns.Add("D");
dt_tj.Columns.Add("E"); DataView dv = new DataView();
之前的没有指定列的类型,以至于出现排序是按第一个数字排的顺序(如图),其实可以理解,没有给他指定类型那么他默认就是object类型,现在改了,在添加列的时候并给其添加类型:
dt_tj = proB.GetProcedureTable("pro_GetCgl", param, "pro_GetCgl"); //此处把成功率加进来,即加五个列
dt_tj.Columns.Add("A",typeof(double));
dt_tj.Columns.Add("B",typeof(double));
dt_tj.Columns.Add("C", typeof(double));
dt_tj.Columns.Add("D",typeof(double));
dt_tj.Columns.Add("E",typeof(double)); DataView dv = new DataView();
//循环加入一列的数据
if (dt_tj.Rows.Count > )
{
foreach (DataRow row in dt_tj.Rows)
{
if (string.IsNullOrEmpty(row["bgq"].ToString().Trim()) || row["syq"].ToString().Trim() == "")
{
row["A"] = "";
}
else
{
row["A"] = Convert.ToDouble((Convert.ToDouble(row["bgc"].ToString().Trim()) / Convert.ToDouble(row["bgq"].ToString().Trim())*).ToString("0.00"));
} if (string.IsNullOrEmpty(row["cyq"].ToString().Trim()) || row["cyq"].ToString().Trim() == "")
{
row["B"] = "";
}
else
{
row["B"] = Convert.ToDouble((Convert.ToDouble(row["cyc"].ToString().Trim()) / Convert.ToDouble(row["cyq"].ToString().Trim()) * ).ToString("0.00"));
} if (string.IsNullOrEmpty(row["syq"].ToString().Trim()) || row["syq"].ToString().Trim() == "")
{
row["C"] = "";
}
else
{
row["C"] =Convert.ToDouble((Convert.ToDouble(row["syc"].ToString().Trim()) / Convert.ToDouble(row["syq"].ToString().Trim()) * ).ToString("0.00"));
} if (string.IsNullOrEmpty(row["jdq"].ToString().Trim()) || row["jdq"].ToString().Trim() == "")
{
row["D"] = "";
}
else
{
row["D"] =Convert.ToDouble(( Convert.ToDouble(row["jdc"].ToString().Trim()) / Convert.ToDouble(row["jdq"].ToString().Trim()) * ).ToString("0.00"));
} if (string.IsNullOrEmpty(row["qtq"].ToString().Trim()) || row["qtq"].ToString().Trim() == "")
{
row["E"] = "";
}
else
{
row["E"] = Convert.ToDouble((Convert.ToDouble(row["qtc"].ToString().Trim()) / Convert.ToDouble(row["qtq"].ToString().Trim()) * ).ToString("0.00"));
}
}
这才是想要的结果。
下面是另一种排序方法:
DataRow[] rows = dt_tj.Select("", "[A] DESC");
DataTable tblCopy = new DataTable("tablename");
tblCopy = dt_tj.Clone();
foreach (DataRow row in rows)
{
tblCopy.ImportRow(row);
}
dt_tj = tblCopy;
注:如上生成了一个 dtTbl的Copy(tblCopy = dtTbl.Clone()),即架构完全一样的空表,同时用DataTable类的实例方法 Select()返回了由dtTbl中所有DataRow按ASC或者DESC排序的DataRow数组。
改方法MSDN里解释得相当详细,这里不赘述。 然后用一个foreach循环把排好序的DataRow数组导入新生成的DataTable,如果后面要用到排序,只要把数据集改成这个tblCopy就 可以了。
这里由于是新生成的DataTable,同时有重新导入了DataRow,即在内存中新开辟了一块数据区域,这样显示结果就不会变了。
注意! 法二中不能在返回排序数组后用dtTbl.Clear()方法清空dtTbl,然后用dtTbl重新导入rows, 因为 rows数组中的各项只是对dtTbl中各DataRow的引用,是浅复制,不是深复制,即只是指向原dtTbl的rows内存区,变的只是引用的顺序,而不是原dtTbl的
rows的顺序,所以清空dtTbl,就相当于清空了数据源,import的结果就是空的tblCopy! 附:
dc.DataType = typeof(bool);
dc.DataType = typeof(System.Boolean);
dc.DataType = Type.GetType("System.Boolean");// 这句效率底下,不建议使用,
dataTabel转成dataview插入列后排序的更多相关文章
- su成别的用户后仍以原来私钥访问远程机器
背景: 同步机和游戏服两台机都有个人用户账号和游戏账号xy1,游戏服设了xy1的ssh强制命令来受同步机的xy1控制.现在需要在同步机上用xy1进行一个控制游戏服的操作,该操作需要在同步机远程tail ...
- [DataTable]控件排序事件中用DataView及DataTable排序
控件排序事件中用DataView及DataTable排序 文章分类:.net编程 在做ASP.NET页面开发时,经常要用到dataset(或者DataTable),绑定到DataGrid或GridVi ...
- springboot打包成jar包后找不到xml,找不到主类的解决方法
springboot打包成jar包后找不到xml,找不到主类的解决方法 请首先保证你的项目能正常运行(即不打包的时候运行无误),我们在打包时经常遇到如下问题: springboot打包成jar包后找不 ...
- maven把项目打包成jar包后找不到velocity模板的bug
使用springmvc 开发时候要实现发送velcotiy模板邮件,在配置正常后,在本地测试正常后,使用maven打包成jar包后,报以下错误, Caused by: org.apache.veloc ...
- 排序(分组后排序&整排)
一.整排 要求:根据score进行排名,分数相同,名次相同,且连续 表如下图: sql语句: 方法一:select a.score, (select count(distinct b.score) f ...
- SqlSever基础 convert 将类型为字符的一列转成Int类型后进行排序
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- mysql特殊查询----分组后排序
使用的示例表 学生表----student 表结构 数据 查询方法 一.第一种方法 我认为这是比较传统,比较容易理解的一种方式,使用自连接,并在连接条件中作比较,之后再对查询条件分组统计,排序. se ...
- SQL GROUP BY 后排序
由于GROUP BY 使用Sum函数后 ID等唯一值就无法查询出来了,所以想按照ID排序也就不可以了. 这时可以使用一个MIN 或者MAX函数来取得一个最小或者最大的ID 这样就可以实现以其中一条ID ...
- Unity3d发布成exe项目后的设置(全屏自适应屏幕大小)
原地址:http://blog.sina.com.cn/s/blog_697b1b8c0101gd46.html 1. 去除启动exe项目时出现的画面窗口 File ☞ Build Settings ...
随机推荐
- EF扩展库(批量操作)
EF删除和修改数据只能先从数据库取出,然后再进行删除 delete from Table1 where Id>5; update Table1 set Age=10; 我们需要这样操作 //删除 ...
- CSS知识点补充
一.css框模型概述 元素框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景.内边距的边缘是边框.边框以外是外边距,外边距默认是透明的,因此不会遮挡其后的任何元素 1.css内边 ...
- AJAX中UPDATEPANEL配合TIMER控件实现局部无刷新
首先加入UpdatePanel <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode= ...
- Recompile the invalid object for oracle.
1. How does the invalid object come? The Oracle database will invalidate objects if a dependent obje ...
- JavaScript:日期选择器组件的使用
前言: 在实际项目开发中,日期选择是一个十分常见而且重要的问题,在表单中设计到日期的验证时,如果让用户自己输入时间的话,那么使用正则进行验证其正确性是不可取的,因为他一般只能验证日期的格式,无法准确的 ...
- android开发经验
1.选好"车轮" 一个项目的开发,我们不可能一切从0做起,如果真是这样,那同样要哭瞎.因此,善于借用已经做好的 "车轮" 非常重要,如: 网络访问框架:okht ...
- Python自省(反射)指南
在笔者,也就是我的概念里,自省和反射是一回事,当然其实我并不十分确定一定以及肯定,所以如果这确实是两个不同的概念的话,还请多多指教 :) 转载请注明作者.出处并附上原文链接,多谢!update 201 ...
- centos linux安全和调优 第四十一节课
centos linux安全和调优 第四十一节课 上半节课 Linux安全 下半节课 Linux调优 2015-07-01linux安全和调优 [复制链接]--http://www.apele ...
- MEF 松耦合
MEF天生就有解耦合的特性,虽然它不是为解耦而生,而主要是为插件类应用的开发而设计.如果主要是为了解除耦合的话可以使用IoC,Unity等. Unity 微软的IOC 代码: using System ...
- H3C S3600-28TP-SI配置命令
模式分类为:<H3C> 用户视图 [H3C] 系统视图 [H3C-Ethernet1/0/1] 以太网端口视图 [H3C-vlan10] VLAN视图 [H3C-Vl ...