原来DataSet中有两个表dt1,dt2,有一个relation("1-2"),现在我想在DataSet中插入一个表dt3,然后删除relation("1-2"),并添加两个新的relation,用来关联dt1-dt3和dt3-dt2。可是运行出错,错误说:relation没有创建成功,由于没有指定相应的父值。请高手指点错在哪里?如何实现?谢谢!代码如下:
DataSet ds = new DataSet();
DataTable dt1 = new DataTable();
dt1.Columns.Add("AA");
dt1.Columns.Add("BB");
ds.Tables.Add(dt1);DataTable dt2 = new DataTable();
dt2.Columns.Add("AA");
dt2.Columns.Add("CC");
ds.Tables.Add(dt2);DataRow dr1 = dt1.NewRow();
dr1["AA"] = "aa";
dr1["BB"] = "bb";
dt1.Rows.Add(dr1);DataRow dr2 = dt2.NewRow();
dr2["AA"] = "aa";
dr2["CC"] = "cc1";
dt2.Rows.Add(dr2);
DataRow dr3 = dt2.NewRow();
dr3["AA"] = "aa";
dr3["CC"] = "cc2";
dt2.Rows.Add(dr3);ds.Relations.Add("1-2", dt1.Columns["AA"], dt2.Columns["AA"]);DataTable dt3 = new DataTable();
dt3.Columns.Add("P");
dt3.Columns.Add("C");
ds.Tables.Add(dt3);
DataRow dr4 = dt3.NewRow();
dr4["P"] = "aa";
dr4["C"] = "aa";
dt3.Rows.Add(dr4);ds.Relations.Remove("1-2");ds.Relations.Add("1-3", dt1.Columns["AA"], dt3.Columns["P"]);
ds.Relations.Add("3-2", dt3.Columns["C"], dt2.Columns["CC"]);// 报错行。

解决方案 »

  1.   

    ref:
    http://www.syncfusion.com/faq/windowsforms/search/1012.aspx
      

  2.   

    To Knight94(愚翁)
    一般情况下的Relation添加是没有问题的,方法我也知道,比如:
    ds.Relations.Add("1-3", dt1.Columns["AA"], dt3.Columns["P"]);
    这一行就没有报错,但是不知道为什么
    ds.Relations.Add("3-2", dt3.Columns["C"], dt2.Columns["CC"]);// 报错行。
    就报错了。
    为什么有数据的时候该relation就这么麻烦。请指点为什么这个地方错了,谢谢!
      

  3.   

    由于Relation的添加,不单单是Relations这个collection发生变化,相应的DataColumn也有变化
      

  4.   

    运行了一下:把
    ds.Relations.Add("3-2", dt3.Columns["C"], dt2.Columns["CC"]);// 报错行。
    改成:
    ds.Relations.Add("3-2", dt3.Columns["C"], dt2.Columns["CC"],false);
      

  5.   

    To 鸽子虫
    这个方法我试过了,运行可以通过,可是就没有方法通过GetChildRow()方法获得子表中的数据行了。结合程序的结构我做了一个逻辑,绕过了这个问题,不过心中还是不爽,呵呵。先结贴了,谢谢大家!