当前位置: 代码迷 >> ASP.NET >> DATASET 中table 合并的有关问题,解决者50分奉送,第一次
  详细解决方案

DATASET 中table 合并的有关问题,解决者50分奉送,第一次

热度:8460   发布时间:2013-02-25 00:00:00.0
DATASET 中table 合并的问题,解决者50分奉送,第一次求助
dataset 中有多个table tb1 tb2 tb3 tb4...., 
每个表都有两个字段,第一个字段名相同,第二个字段为数据型(b1 c1 等都是数值),如下:
tb1 | tb2 .....
co1 ca |co1 cb
a1 b1 | a1 c1 .....
a2 b2 | a2 c2 ....
a3 b3 | a4 c4 ....
a4 b4 | a6 c6 ....
a5 b5 | a8 c8 .....
a7 b7 | a10 c10 .....
.....
要求:把多个table 合成一个table ,第一个字段的值相同,合为一行,其中一个表无第一个字段的值的,按0计入该列.如下示:
注:每个表的记录数据最多为30条,dataset 中的tb1...都是经过复杂sql提取出来,不要想着从sql语句着手.
合并成一个table 如tball 
tball
coall1 coall2 coall3 .....
a1 b1 c1 ......
a2 b2 c2 .......
a3 b3 0 .......
a4 b4 c4 .....
a5 b5 0 .....
a6 0 c6 .....
a7 b7 0 .....
a8 0 c8 .....
a10 0 c10 .....
......

------解决方案--------------------------------------------------------
table1.Merge(table2);

------解决方案--------------------------------------------------------

多少个表就定义多少个dataTable
dt1,dt2,dt3....

前台 重构一个 datatable




------解决方案--------------------------------------------------------
你不是说在sql中实现已经不可能了吗?
那只好重新构造一个表了。
在程序中,通过判断你所知道的两个表的DataRow,来构造一个新的表的DataRow,我能想到的只有这些了。
========================
fancystyle 
请问能教教我这个Merge的用法吗?
------解决方案--------------------------------------------------------
我觉得资料量不是很大吧, 30 ×(表的数量有100 吗?),对于CPU来说小意思吧,
重新构造一个表吧。
C# code
//取得处理之后的table    private DataTable GetTableByDS(DataSet das)    {        DataTable dt = das.Tables[0].Clone();        //记录行数最长的值        int intRowsCount = das.Tables[0].Rows.Count;        //记录行数最长的那一个table 的index        int indexDt = 0 ;        for (int i = 1; i < das.Tables.Count; i++)        {            if(intRowsCount < das.Tables[i].Rows.Count)            {                intRowsCount = das.Tables[i].Rows.Count ;                indexDt = i;            }            //没有重复column name 的情况下,不需要判断是否有重复的                        dt.Columns.Add(das.Tables[i].Columns[1].ColumnName,typeof(Int32));                  }        dt.AcceptChanges();        //记录行数最长的那一个table        DataTable keepDatadt = das.Tables[indexDt];        DataRow dr = null;        for (int i = 0; i < intRowsCount; i++)        {            dt.ImportRow(keepDatadt.Rows[i]);//添加一行资料             dr =dt.Rows[i];            for (int j = 0; j < das.Tables.Count; j++)            {                //为每个栏位赋值                dr[j + 1] = GetNumber(das.Tables[j], dt.Columns[0].ColumnName);            }         }        dt.AcceptChanges();        return dt;    }    //取得 某个栏位的值    private int GetNumber(DataTable dt, string strColumn1Value)    {       DataRow[] drs =  dt.Select(string.Format("{0} = '{1}'", dt.Columns[0].ColumnName, strColumn1Value));       if (drs.Length > 0)       {           Convert.ToInt32(drs[0][1]);       }       else       {           return 0;       }    }
  相关解决方案