SqlDataAdapter cmd = new SqlDataAdapter(strSql, objcon);
            SqlDataAdapter cmd2 = new SqlDataAdapter(strSql2, objcon);//创建表
            DataSet ds = new DataSet();
            DataTable ts1 = new DataTable();
//ts1创建列,并赋列名
            DataColumn keyid1=new DataColumn();
            keyid1.ColumnName="keyid1";
            keyid1.DataType=System.Type.GetType("System.Int32");
            ts1.Columns.Add(keyid1);
            DataColumn testtxt1=new DataColumn();
           testtxt1.ColumnName="testtxt1";
            testtxt1.DataType=System.Type.GetType("System.String");
            ts1.Columns.Add(testtxt1);
//ts2表
            DataTable ts2 = new DataTable();
            DataColumn keyid2=new DataColumn();
            keyid2.ColumnName="keyid2";
            keyid2.DataType=System.Type.GetType("System.Int16");
            ts2.Columns.Add(keyid2);
            DataColumn testtxt2=new DataColumn();
            testtxt2.ColumnName="testtxt2";
            testtxt2.DataType=System.Type.GetType("System.String");
            ts2.Columns.Add(testtxt2);
//放入dataset
            ds.Tables.Add(ts1);
            ds.Tables.Add(ts2);
//将数据库中的两个表填充给ds中的ts1与ts2表           
            cmd.Fill(ds, "ts1");
            cmd2.Fill(ds, "ts2");
//准备建立关系
            DataColumn tt1, tt2;//问题就在此处,使用column名,则提示需要new,很奇怪,按书上写的还出错!
            //tt1 = ds.Tables["ts1"].Columns["keyid1"];
            //tt2 = ds.Tables["ts2"].Columns["keyid2"];
//使用下面的索引则一切正常!
            tt1 = ds.Tables["ts1"].Columns[0];
            tt2 = ds.Tables["ts2"].Columns[0];
            DataRelation testr;
            testr = new DataRelation("TabGX", tt1, tt2);
            ds.Relations.Add(testr);
            foreach (DataRow theTabGx in ds.Tables["ts2"].Rows)
            {
                DataRow[] parents = theTabGx.GetParentRows("TabGX");
                foreach (DataRow theTabGX1 in parents)
                {
             //此处问题相同,不能使用名称,只能使用索引!
                    Response.Write(theTabGx[1]);
                    Response.Write(theTabGX1[1]);
                    Response.Write("<br>");
                }
            }-----------------------------------------------------
请高手指点.费心了! 

解决方案 »

  1.   

    用这干吗这么麻烦
    直接DateSet set = new DateSet();
    set.dateScroue = "绑定的数据";
      

  2.   

    在dataset中做数据关系,存储会快!想试一下relations的功能呀!
      

  3.   

    DataSet.Relations.Add("关联名称", 父关联主键字段, 子关联外来键字段)   
    DataTable dt1 = new DataTable();
    DataTable dt2 = new DataTable();
    ds.Tables.Add(dt1);   
    ds.Tables.Add(dt2);   
    DataRelation dsdr = new DataRelation("Position", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["id"]);   
    ds.Relations.Add(dsdr);   
      

  4.   

    DataSet.Relations.Add("关联名称", 父关联主键字段, 子关联外来键字段)   
    DataTable dt1 = new DataTable();
    DataTable dt2 = new DataTable();
    ds.Tables.Add(dt1);   
    ds.Tables.Add(dt2);   
    DataRelation dsdr = new DataRelation("Position", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["id"]);   
    ds.Relations.Add(dsdr);   
    ==================================================================
    高手麻烦看一下我的码....我就是在这个DataRelation dsdr = new DataRelation("Position", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["id"]);   地方出问题...无法使用ds.Tables[0].Columns["id"]
    用ds.Tables[0].Columns[0]就整个没有问题!也就是说调用ds.Tables[0].Columns["列名"]提示出错,但调用ds.Tables[0].Columns[索引号]则没有问题!
      

  5.   

    能不能给一个调用columns["列名"]成功的例子也行呀!
      

  6.   

      SqlDataAdapter cmd = new SqlDataAdapter(strSql, objcon);
      SqlDataAdapter cmd2 = new SqlDataAdapter(strSql2, objcon);//创建表
      DataSet ds = new DataSet();
    /* --------- 试着把这以后的内容去掉 ------------- *  DataTable ts1 = new DataTable();
    //ts1创建列,并赋列名
      DataColumn keyid1=new DataColumn();
      keyid1.ColumnName="keyid1";
      keyid1.DataType=System.Type.GetType("System.Int32");
      ts1.Columns.Add(keyid1);
      DataColumn testtxt1=new DataColumn();
      testtxt1.ColumnName="testtxt1";
      testtxt1.DataType=System.Type.GetType("System.String");
      ts1.Columns.Add(testtxt1);
    //ts2表
      DataTable ts2 = new DataTable();
      DataColumn keyid2=new DataColumn();
      keyid2.ColumnName="keyid2";
      keyid2.DataType=System.Type.GetType("System.Int16");
      ts2.Columns.Add(keyid2);
      DataColumn testtxt2=new DataColumn();
      testtxt2.ColumnName="testtxt2";
      testtxt2.DataType=System.Type.GetType("System.String");
      ts2.Columns.Add(testtxt2);
    //放入dataset
      ds.Tables.Add(ts1);
      ds.Tables.Add(ts2); * --------- 试着把这以上的内容去掉 ------------- */
    //将数据库中的两个表填充给ds中的ts1与ts2表  
      cmd.Fill(ds, "ts1");  // <--- 我的理解是填充时自动生成 ts1,
      cmd2.Fill(ds, "ts2"); // <--- 和 ts2,并不需要按上面那样手动生成。
    // 列名也不是 keyid1、keyid2 之类,而是数据库中的字段名。
      

  7.   

    Columns.ColumnName应该是列名吧.
    我用数据库字段名试了..也不行!真搞不清原因了..还要等熟悉这块的朋友来指点了!
      

  8.   

    SqlDataAdapter cmd = new SqlDataAdapter(strSql, objcon);
      SqlDataAdapter cmd2 = new SqlDataAdapter(strSql2, objcon);//创建表
      DataSet ds = new DataSet();
    将中间那块去掉,直接用
      cmd.Fill(ds, "ts1");  
      cmd2.Fill(ds, "ts2"); 
    DataColumn tt1, tt2;
                tt1 = ds.Tables["ts1"].Columns[0];
                tt2 = ds.Tables["ts2"].Columns[0];
                DataRelation testr;
                testr = new DataRelation("TabGX", tt1, tt2);
                ds.Relations.Add(testr);
                
    这样去运行...仍然正确,可以得到结果!但怎么样才能调到Columns["列名"]呢?书上写着是这样调的!
      

  9.   


    using System;
    using System.Data;class Program
    {
      static void Main()
      {
        DataTable ts1 = new DataTable();
        DataColumn keyid1=new DataColumn();
        keyid1.ColumnName="keyid1";
        keyid1.DataType=System.Type.GetType("System.Int32");
        ts1.Columns.Add(keyid1);
        DataColumn testtxt1=new DataColumn();
        testtxt1.ColumnName="testtxt1";
        testtxt1.DataType=System.Type.GetType("System.String");
        ts1.Columns.Add(testtxt1);
        ts1.Rows.Add(123, "abc");
        Console.WriteLine(ts1.Rows[0]["keyid1"]); // 成功输出 123
      }
    }
      

  10.   

    using System;
    using System.Data;class Program
    {
      static void Main()
      {
        DataTable ts1 = new DataTable();
        DataColumn keyid1=new DataColumn();
        keyid1.ColumnName="keyid1";
        keyid1.DataType=System.Type.GetType("System.Int32");
        ts1.Columns.Add(keyid1);
        DataColumn testtxt1=new DataColumn();
        testtxt1.ColumnName="testtxt1";
        testtxt1.DataType=System.Type.GetType("System.String");
        ts1.Columns.Add(testtxt1);
        ts1.Rows.Add(123, "abc");    DataColumn tt1 = ts1.Columns["keyid1"]; // <--- OK,没问题。
        Console.WriteLine(tt1); // 成功输出 keyid1
      }
    }
      

  11.   

                DataSet ds = new DataSet(); //建立ds dataset 
    //表ts1为防止名称重复,将columnName改为tkeyid1
                DataTable ts1 = new DataTable();
                DataColumn keyid1=new DataColumn();
                keyid1.ColumnName="tkeyid1";
                keyid1.DataType=System.Type.GetType("System.Int32");
                ts1.Columns.Add(keyid1);
                DataColumn testtxt1=new DataColumn();
               testtxt1.ColumnName="testtxt1";
                testtxt1.DataType=System.Type.GetType("System.String");
                ts1.Columns.Add(testtxt1);
    //建立ts2表,与上面一样
                DataTable ts2 = new DataTable();
                DataColumn keyid2=new DataColumn();
                keyid2.ColumnName="tkeyid2";
                keyid2.DataType=System.Type.GetType("System.Int32");
                ts2.Columns.Add(keyid2);
                DataColumn testtxt2=new DataColumn();
                testtxt2.ColumnName="testtxt2";
                testtxt2.DataType=System.Type.GetType("System.String");
                ts2.Columns.Add(testtxt2);
    //不连数据库了,直接赋值
                  ts1.Rows.Add(123, "aaa");
                ts2.Rows.Add(123, "bbb");
    //加到到ds
              ds.Tables.Add(ts1);
                ds.Tables.Add(ts2);
    //做relations
      ds.Relations.Add("TabGX", 
                        ds.Tables["ts1"].Columns["tkeyid1"],
                        ds.Tables["ts2"].Columns["tkeyid2"]
                        );
    //运用做的关系,然后输出两边的关联值
                  foreach (DataRow theTabGx in ds.Tables["ts2"].Rows)
                {
                    DataRow[] parents = theTabGx.GetParentRows("TabGX");
                    foreach (DataRow theTabGX1 in parents)
                    {
                        Response.Write(theTabGx[1]);
                        Response.Write(theTabGX1[1]);
                        Response.Write("<br>");
                    }
                }
    ==================================================================仍然出问题!...            
      

  12.   

    搞定了!
    用response.write(ds.Tables["ts1"].Columns[0]);
    可以看到,为数据库名称...调用为列名!