DataTable Dt1 = GetPaiHangTop10(Convert.ToInt32(Number));
DataTable Dt2 = GetPaiHangCompare(Convert.ToInt32(Number));想要把这两个数据源用Dt1.Columns["JournalID"]、Dt2.Columns["JID"]连接起来,Dt2表中的数据有可能不完全配置Dt1(记录总数少于Dt1),如果出现Dt2无法找到与Dt1关连则向该字段填充一个默认值(0)。Dt1数据结构JournalID Name_CN            Total64 园林工程64          150
2 园林工程2           ..
11 浙江绿化苗木11      ..
8 园林工程8           ..
1 浙江绿化苗木1       ..
7 浙江绿化苗木7       .. 
10 园林工程10          ..
9 浙江绿化苗木9       ..
6 园林工程6           ..
3 浙江绿化苗木3       ..Dt2数据结构JID      OldTotal1        20
2        20
3 40
7 20
8 30
10 30
11 30

解决方案 »

  1.   

    DataTable Dt1 = GetPaiHangTop10(Convert.ToInt32(Number));
    DataTable Dt2 = GetPaiHangCompare(Convert.ToInt32(Number));我想把两张表连起来,用Dt1的JournalID字段和Dt2的JID字段来关连JournalID Name_CN            Total64 园林工程64          150
    2 园林工程2           ..
    11 浙江绿化苗木11      ..
    8 园林工程8           ..
    1 浙江绿化苗木1       ..
    7 浙江绿化苗木7       .. 
    10 园林工程10          ..
    9 浙江绿化苗木9       ..
    6 园林工程6           ..
    3 浙江绿化苗木3       ..Dt2数据结构JID      OldTotal1        20
    2        20
    3 40
    7 20
    8 30
    10 30
    11 30 这样能看懂哇????
      

  2.   

    DataRelation dr = new DataRelation("FK_RELATION",Dt1.Columns["JournalID"],Dt2.Columns["JID"]);
      

  3.   

    我想把两张表连起来,用Dt1的JournalID字段和Dt2的JID字段来关连
    ======
    连接,有内连接,左右外连接,全外连接,交叉连接
    你想的哪种................
    我只能猜应该是左外连Dt2表中的数据有可能不完全配置Dt1(记录总数少于Dt1)
    =========
    又不懂什么叫完全配置
    ................
    我猜你的意思是这是个一对(一或空)的对应关系(暗喻不可能一对多)
    如果出现Dt2无法找到与Dt1关连则向该字段填充一个默认值(0)。
    ==============
    .............
    如果找不到dt2中对应的记录,则象(哪个字段)填充一个默认值?这个实实在在的猜不出来了
      

  4.   

    抱歉,打错字了,应该是匹配,不完全匹配Dt1(Dt2记录总数少于Dt1)向JID字段填充一个默认值
      

  5.   

    Re:babyrockxray(紫色阴影)这种方法链接时出错
    DataRelation dr = new DataRelation("FK_RELATION",Dt1.Columns["JournalID"],Dt2.Columns["JID"]);提示:“column”参数不能为空。参数名: column 
      

  6.   

    建个视图直接读视图多好:
    Create View Dt1_Dt2 As
    Select JournalID,Name_CN,Total,OldTotal
    From Dt1 Left Join On Dt2
    On Dt1.JournalID=Dt2.JID这样,如果Dt2有匹配行,则为原值,没有则为null。直接读视图Dt1_Dt2即可。
      

  7.   

    RE:Ivy_zheng(最后一只恐龙) 上面这两个数据集都是通过两张表连接,Group By分组取出来的,没法用视图
      

  8.   

    可以的,先用Group by分别建视图,再在两个视图基础上建我说的那个视图。
      

  9.   

    DataSet DSet=(new Services()).XT_HTFIL_FILTER("");DataSet DSet1=(new Services()).XT_HTFL_FILTER1("");//****将Dset1复制到dset中DSet.Tables.Add(DSet1.Table[0].Copy());上面这样就可以了三.把两个数据数据集合成一个哈
      

  10.   

    哎,说真的,我还是不明白
    而且我再猜你是想将两个条合并成一个表,而不是要建立父子关系你要的是
    JournalID Name_CN Total
    2园林工程2 ..
    1浙江绿化苗木1 ..
    8园林工程8 JID OldTotal
    1 20
    2 20合并成JournalID Name_CN       Total  JID OldTotal
    2         园林工程2     ..     2    20
    1         浙江绿化苗木1 ..     1    20
    8         园林工程8     ..     0     0
    这样一张表而不是
    成为
    2         园林工程2     ..
                  ______________________________
                  2   20
                  ______________________________
    1         浙江绿化苗木1 ..  
                 ______________________________
                  1   20
                 _______________________________
    8         园林工程8  
                 _______________________________
                 _______________________________
    如果我猜得不对就很不好意思了
    其实不管是合并表还是建立父子关系映射,很多人都可以帮你
    但是事实上,我真的不知道你要的是什么,我相信上面也有很多热心人和我一样
    真的不知道你说的是什么
      

  11.   

    JournalID Name_CN       Total  JID OldTotal
    2         园林工程2     ..     2    20
    1         浙江绿化苗木1 ..     1    20
    8         园林工程8     ..     0     0
    对,就是这样
    帮我看看应该怎么写吧,万分感谢!
      

  12.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;namespace UniteTable
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Relations只能应用于同一dataSet的datatable之间
                DataSet ds = new DataSet();
                //创建子表
                DataTable dtDetail = CreateDetail();
                ds.Tables.Add(dtDetail);
                //创建父表
                DataTable dtMaster = CreateMaster();
                //拷贝父表到结果表,如果不需要保留原始表,则可以直接操作父表
                DataTable dtResult = dtMaster.Copy();
                //从子表加入新的字段信息
                foreach (DataColumn dc in dtDetail.Columns)
                {
                    dtResult.Columns.Add(dc.ColumnName, dc.DataType);
                }
                //加入到结果集
                ds.Tables.Add(dtResult);
               //建立映射关系并加入到dataset
                DataRelation dr = new DataRelation("dr", dtResult.Columns["JournalID"], dtDetail.Columns["JID"]);
                ds.Relations.Add(dr);
                //遍历结果表
                foreach (DataRow drMaster in dtResult.Rows)
                {
                    //得到明细记录
                    DataRow[] drDetails=drMaster.GetChildRows(dr);
                    //如果有明细,则取第一条,也可以遍历后取和值
                    if (drDetails.Length > 0)
                    {
                        foreach (DataColumn dc in dtDetail.Columns) {
                            drMaster[dc.ColumnName] = drDetails[0][dc.ColumnName];
                        }
                    }
                    //如果没有明细,这儿给的是空值,你也可以使用你的逻辑比如是0
                    else {
                        foreach (DataColumn dc in dtDetail.Columns)
                        {
                            drMaster[dc.ColumnName] = DBNull.Value;
                        }
                    }
                    
                }
                //打印表头
                foreach (DataColumn dc in dtResult.Columns) {
                    Console.Write("{0}\t", dc.ColumnName);
                }
                Console.WriteLine();
                //打印记录集
                foreach (DataRow drMaster in dtResult.Rows) {
                    foreach (DataColumn dc in dtResult.Columns) {
                        Console.Write("{0}\t", drMaster[dc.ColumnName]);
                    }
                    Console.WriteLine();
                }
                //至此结束
                Console.Read();            
            }
            
            static DataTable CreateMaster(){
                DataTable dt = new DataTable();
                dt.Columns.Add("JournalID", typeof(int));
                dt.Columns.Add("Name_CN", typeof(string));
                dt.Rows.Add(new object[] { 2,"园林工程2" });
                dt.Rows.Add(new object[] { 1, "浙江绿化苗木1" });
                dt.Rows.Add(new object[] { 8, "园林工程8" });
                return dt;
            }
            static DataTable CreateDetail() {
                DataTable dt = new DataTable();
                dt.Columns.Add("JID", typeof(int));
                dt.Columns.Add("OldTotal", typeof(int));
                dt.Rows.Add(new object[] { 2, 20 });
                dt.Rows.Add(new object[] { 1, 10 });
                return dt;
            }
        }
    }
      

  13.   

    首先谢谢乔大哥对我的问题持续关注,今天特地跑来加班解决这个问题我完全按照您上面指点的做了一遍,提示这里有错误
    DataRelation dr = new DataRelation("dr", Dt1.Columns["JournalID"], Dt2.Columns["JID"]);
    Ds.Relations.Add(dr);错误信息:
    “column”参数不能为空。参数名: column 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentNullException: “column”参数不能为空。参数名: column
      

  14.   

    Dt1.Columns["JournalID"]
    Dt1不存在名为JournalID的列
    Dt2.Columns["JID"]
    或者Dt2不存在名为JID的列
      

  15.   

    不能启用此约束,因为不是所有的值都具有相应的父值。
    Dt2记录可能不完全匹配Dt1(Dt2记录数少于Dt1)
      

  16.   

    不能启用此约束,因为不是所有的值都具有相应的父值。Dt2中的JID字段中含有不存在于Dt1的JournalID中的值,也就是两者不是主/外键关系
    这种情况下更适合遍历
      

  17.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;namespace UniteTable
    {
        class Program
        {
            static void Main(string[] args)
            {
                        DataTable dtMaster = CreateMaster();
                DataTable dtDetail = CreateDetail();
                DataTable dtResult = dtMaster.Copy();
                foreach (DataColumn dc in dtDetail.Columns)
                {
                     dtResult.Columns.Add(dc.ColumnName, dc.DataType);
                }            foreach (DataRow drMaster in dtResult.Rows) {
                    bool updated = false;
                    foreach (DataRow drDetail in dtDetail.Rows) {
                        if ((int)drDetail["JID"] == (int)drMaster["JournalID"]) {
                            drMaster["JID"] = drDetail["JID"];
                            drMaster["OldTotal"] = drDetail["OldTotal"];
                            updated = true;
                            break;
                        }
                    }
                    if (!updated) {
                        drMaster["JID"] = drMaster["JournalID"];
                        drMaster["OldTotal"] =0;
                    }            }
              
                                //打印表头
                foreach (DataColumn dc in dtResult.Columns) {
                    Console.Write("{0}\t", dc.ColumnName);
                }
                Console.WriteLine();
                //打印记录集
                foreach (DataRow drMaster in dtResult.Rows) {
                    foreach (DataColumn dc in dtResult.Columns) {
                        Console.Write("{0}\t", drMaster[dc.ColumnName]);
                    }
                    Console.WriteLine();
                }
                Console.Read();            
            }
            
            static DataTable CreateMaster(){
                //JournalID 
                //Name_CN
                DataTable dt = new DataTable();
                dt.Columns.Add("JournalID", typeof(int));
                dt.Columns.Add("Name_CN", typeof(string));
                dt.Rows.Add(new object[] { 2,"园林工程2" });
                dt.Rows.Add(new object[] { 1, "浙江绿化苗木1" });
                dt.Rows.Add(new object[] { 8, "园林工程8" });
                return dt;
            }
            static DataTable CreateDetail() {
                DataTable dt = new DataTable();
                dt.Columns.Add("JID", typeof(int));
                dt.Columns.Add("OldTotal", typeof(int));
                dt.Rows.Add(new object[] { 2, 20 });
                dt.Rows.Add(new object[] { 1, 10 });
                dt.Rows.Add(new object[] { 10, 100 });
                return dt;
            }
        }
    }
      

  18.   

    我把你的代码完全拷贝过来,把主表赋给dtMaster,把从表赋给dtDetail,仍然不行我又把你最后一次修改的代码全部拷下来,新建一个页面调试也是什么都不显示郁闷中....