datatable的小知识点

关于合并多个datatable

甲方爸爸要求使用rdlc做报表,报表内容需要从数据库中的多张表拼接得出,因无法使用SQL语句直接导出结果表格,故需要将多张datatable拼接得到相同的表格,即结果表格式为多个表格式相加

新建结果表:

Dim dt as DataTalbe
Dim dr as DataRow
dt.Columns.Add("ColumnName")
dt.Columns("ColumnName").DataType =System.Type.GetType("System.Double")
……
dt.Rows.Add(dr)

以上是在VB.Net环境下使用vb语言构建的表结构,也可以通过SQL语句构建:

select '' col1,0 col2,0.00 col3 from database1.dbo.table1 where 1<>1

PS:使用1<>1可以调用数据表的表结构,1=1可以避免在SQL语句撰写过程中避免Where子句后无查询条件的尴尬局面

将表格整理的出后,需要将表格1、表格2、……、表格N合并成结果表,在初始过程中,是有了for循环去写:

For i As Integer = 0 To dt1.Rows.Count-1
    For n As Integer = 0 to dt2.Rows.Count-1
        if dt1.rows(i)("col1")=dt2.rows(n)("col1") then 
            ……
        end if 
    Next
Next

多层遍历在表格行数少的情况下可以通过遍历来实现,速度也可以
但是数据行在千行以上,响应时间变成了十多秒,这样多个表去对比的话就会增加系统响应时间:
尝试了两种方法:
1.使用Merge方法
2.使用Datatable本身的select方法

1.Merge方法
详可见:https://blog.csdn.net/huanglin529/article/details/53368717
2.使用datatable本身的方法相当与在外层是一层循环体,在内层通过select生成datarow,然后通过row.indexof 获取符合条件的行所在的行数,然后可以快速获得需要的数据。这样的话,相应时间不到一秒,在速度上大大提升

For d2 As Integer = 0 To dtSet.Rows.Count - 1
            Dim tempdr() As DataRow = dttype.Select("筛选条件")
            Dim d As Integer = dttype.Rows.IndexOf(tempdr(0))
            ……
Next

筛选所需要的列

    Dim DtCashShow As DataTable = CashTuiDt.DefaultView.ToTable(False, {"regist_no", "write_month", "RefundPrice1", "RefundPrice4", "RefundCharge","RefundAmount", "Ic_Refund_Soure", "OPER_NO", "OPER_NAME","ApplyDiscountID"})

这种方法适用于外层数据行较少而内层数据行较多的情况,其他方法还在继续学习……
奋斗的娃子一只……………………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值