大家帮忙呀在DataSet 中有了一个table,在外面有一个Table,结构同DataSet中是一样的,怎样把外面的表中的内容一次赋给DataSet中的那张表呀

解决方案 »

  1.   

    private ReportClass prtMisc_Click()
    {
    ComLogOutput.WriteLogFile("prtMisc_Click begin");
    rpt_Miscsouv rpt = new rpt_Miscsouv();
    ReportDocument rptS = rpt.OpenSubreport("rpt_Souvenir.rpt");
    ReportDocument rptO = rpt.OpenSubreport("rpt_Other.rpt");
    ReportDocument rptH = rpt.OpenSubreport("rpt_Header.rpt"); // get tirp misc expenses
    DataSet dsExc = new TripReportDB().GetTripMisc(is_serial.Value,gs_cmpy.Value); DataTable dtMisc = dsExc.Tables[0]; DataTable dtOther = new DataTable();
    dtOther.Columns.Add("NUMBER");
    dtOther.Columns.Add("TRIP_DATE");
    dtOther.Columns.Add("COUNTRY");
    dtOther.Columns.Add("PARTICULAR");
    dtOther.Columns.Add("PURPOSE");
    dtOther.Columns.Add("CURR");
    dtOther.Columns.Add("AMT");
    dtOther.Columns.Add("LOCAL_AMT");
    dtOther.Columns.Add("ATTACHMENT"); if (dtMisc.Rows.Count > 0)
    {
    TextObject txtRe = (TextObject)rptO.ReportDefinition.ReportObjects["txtRe"];
    TextObject txtSumLocalAmt = (TextObject)rptO.ReportDefinition.ReportObjects["txtSumLocalAmt"]; txtRe.Text = dtMisc.Rows[0]["REMARK"].ToString();
    double sumLocalAmt = 0;
    for (int i = 1; i < dtMisc.Rows.Count+1; i++)
    {
    sumLocalAmt += ComStyleCheck.IsDecimail(dtMisc.Rows[i-1]["LOCAL_AMT"].ToString())? Math.Round(double.Parse(dtMisc.Rows[i-1]["LOCAL_AMT"].ToString()), 1):0; DataRow dr = dtOther.NewRow();
    dr["NUMBER"] = i.ToString();
    dr["TRIP_DATE"] = dtMisc.Rows[i-1]["TRIP_DATE"].ToString();
    dr["COUNTRY"] = dtMisc.Rows[i-1]["COUNTRY"].ToString();
    dr["PARTICULAR"] = dtMisc.Rows[i-1]["PARTICULAR"].ToString();
    dr["PURPOSE"] = dtMisc.Rows[i-1]["PURPOSE"].ToString();
    dr["CURR"] = dtMisc.Rows[i-1]["CURR"].ToString();
    dr["AMT"] = dtMisc.Rows[i-1]["AMT"].ToString();
    dr["LOCAL_AMT"] = dtMisc.Rows[i-1]["LOCAL_AMT"].ToString();
    dr["ATTACHMENT"] = dtMisc.Rows[i-1]["ATTACHMENT"].ToString();
    dtOther.Rows.Add(dr);
    }
    txtSumLocalAmt.Text = sumLocalAmt.ToString();
    }
    rptO.SetDataSource(dtOther); DataTable dtSouvenir = new TripReportDB().GetTripSouvenir(is_serial.Value,gs_cmpy.Value).Tables[0]; DataTable dtSouvenirFinal = new DataTable();
    dtSouvenirFinal.Columns.Add("NUMBER");
    dtSouvenirFinal.Columns.Add("TRIP_DATE");
    dtSouvenirFinal.Columns.Add("CUST_NAME");
    dtSouvenirFinal.Columns.Add("REMARK");
    dtSouvenirFinal.Columns.Add("QTY");
    dtSouvenirFinal.Columns.Add("CURR");
    dtSouvenirFinal.Columns.Add("AMT");
    dtSouvenirFinal.Columns.Add("LOCAL_AMT");
    dtSouvenirFinal.Columns.Add("ATTACHMENT"); TextObject title = (TextObject)rptH.ReportDefinition.ReportObjects["Text11"];
    title.Text =  new TripReportDB().GetCmpyName(this.UserInfo.CompCode,UserInfo.EmpNum); if (dtSouvenir.Rows.Count > 0)
    {

    TextObject txtCharacter = (TextObject)rptH.ReportDefinition.ReportObjects["txtCharacter"];
    TextObject txtSerialNo = (TextObject)rptH.ReportDefinition.ReportObjects["txtSerialNo"];
    TextObject txtFullName = (TextObject)rptH.ReportDefinition.ReportObjects["txtFullName"];
    TextObject txtToday = (TextObject)rptH.ReportDefinition.ReportObjects["txtToday"]; TextObject txtRe = (TextObject)rptS.ReportDefinition.ReportObjects["txtRe"];
    TextObject txtSumLocalAmt = (TextObject)rptS.ReportDefinition.ReportObjects["txtSumLocalAmt"]; txtRe.Text = dtSouvenir.Rows[0]["REMARK2"].ToString();
    txtCharacter.Text = "(d)";
    txtSerialNo.Text = dtSouvenir.Rows[0]["SERIAL_NO"].ToString();
    // txtFullName.Text = dtSouvenir.Rows[0]["FULL_NAME"].ToString();
    txtToday.Text = DateTime.Now.ToString("yyyy/MM/dd"); double sumLocalAmt = 0;
    for (int i = 1; i < dtSouvenir.Rows.Count+1; i++)
    {
    sumLocalAmt += ComStyleCheck.IsDecimail(dtSouvenir.Rows[i-1]["LOCAL_AMT"].ToString())? Math.Round(double.Parse(dtSouvenir.Rows[i-1]["LOCAL_AMT"].ToString()), 1):0; DataRow dr = dtSouvenirFinal.NewRow();
    dr["NUMBER"] = i.ToString();
    dr["TRIP_DATE"] = dtSouvenir.Rows[i-1]["TRIP_DATE"].ToString();
    dr["CUST_NAME"] = dtSouvenir.Rows[i-1]["CUST_NAME"].ToString();
    dr["REMARK"] = dtSouvenir.Rows[i-1]["REMARK"].ToString();
    dr["QTY"] = dtSouvenir.Rows[i-1]["QTY"].ToString();
    dr["CURR"] = dtSouvenir.Rows[i-1]["CURR"].ToString();
    dr["AMT"] = dtSouvenir.Rows[i-1]["AMT"].ToString();
    dr["LOCAL_AMT"] = dtSouvenir.Rows[i-1]["LOCAL_AMT"].ToString();
    dr["ATTACHMENT"] = dtSouvenir.Rows[i-1]["ATTACHMENT"].ToString();
    dtSouvenirFinal.Rows.Add(dr);
    }
    txtSumLocalAmt.Text = sumLocalAmt.ToString();
    }
    rptS.SetDataSource(dtSouvenirFinal); ComLogOutput.WriteLogFile("prtMisc_Click end");
    return rpt;
    }
      

  2.   

    再说说
    就是我定义了一个DataSet
      DataSet mySet=new DataSet();
      DataTable myTable=new DataTable("tableOne");
      //这儿添加myTable的列等信息,但是没有值。
      mySet.Tables.Add(myTable);现在,我得到了一个Table,table的结构同myTable的结构一样的,我要怎样才能把table的内容一次传给mySet.Tables["tableOne"]
     当然,不能先把mySet.clear(),再mySet.Tables.Add(table);
    也不要一个一个值传,这样row比较多的时候,效率底,有没有办法一次就把table传给mySet
      

  3.   

    用一循环吧:
    DataTable dt = ds.Tables["tbl"];
    foreach(DataRow dataRow in myTable.Rows)
    {
       DataRow dr = ds.Tables["tbl"].NewRow();
       for(int i=0;i<myTable.Columns.Count;i++)
       {
          dr[i] = dataRow[i];
        }
        ds.Tables["tbl"].Rows.Add(dr);
    }没测试!
      

  4.   

    楼主想用table1=table2吧,好像没有这种方法,只能用循环,
      

  5.   

    不明白你为什么要这么做??
    数据table和DataSet中的table结构一摸一样..为什么就不能直接将数据table加入到DataSet中呢???
      

  6.   

    你可尝试使用Merge进行合并
    mySet.Merge(myTable)
      

  7.   

    谢谢  hchxxzx(NET?摸到一点门槛)  你说的就是我要的
    其实我也查找了DataSet的属性和方法 但是没有找到 ,还是不够仔细。
      

  8.   

    这种情况下用Merge实在是浪费。楼主是想把数据复制一份吗?如果是,DataTable.Copy,如果无所谓,就直接把数据Table放到DataSet里面去就行了。
      

  9.   

    首先我觉得楼主你的思路有问题,呵呵 :)1。你可以先得到你的myTable,接着定义DataSet mySet=new DataSet(),
    然后mySet.Tables.add(myTable);2.你可以尝试楼上hchxxzx(NET?摸到一点门槛) 所建议的使用数据集的Merge方法看看;再说说
    就是我定义了一个DataSet
      DataSet mySet=new DataSet();
      DataTable myTable=new DataTable("tableOne");
      //这儿添加myTable的列等信息,但是没有值。
      mySet.Tables.Add(myTable);现在,我得到了一个Table,table的结构同myTable的结构一样的,我要怎样才能把table的内容一次传给mySet.Tables["tableOne"]
     当然,不能先把mySet.clear(),再mySet.Tables.Add(table);
    也不要一个一个值传,这样row比较多的时候,效率底,有没有办法一次就把table传给mySet
      

  10.   

    再说说
    就是我定义了一个DataSet
      DataSet mySet=new DataSet();
      DataTable myTable=new DataTable("tableOne");
      //这儿添加myTable的列等信息,但是没有值。
      mySet.Tables.Add(myTable);现在,我得到了一个Table,table的结构同myTable的结构一样的,我要怎样才能把table的内容一次传给mySet.Tables["tableOne"]
     当然,不能先把mySet.clear(),再mySet.Tables.Add(table);
    也不要一个一个值传,这样row比较多的时候,效率底,有没有办法一次就把table传给mySet--------------------------
    首先我觉得楼主你的思路有问题,呵呵 :)1。你可以先得到你的myTable,接着定义DataSet mySet=new DataSet(),
    然后mySet.Tables.add(myTable);2.你可以尝试楼上hchxxzx(NET?摸到一点门槛) 所建议的使用数据集的Merge方法看看;
      

  11.   

    首先非常感谢大家给我的建议,再这儿大家对我为什么要这样做不是很清楚,怪我没有说清楚,那么我说说,因为公司asp.net项目要分层,也就是web层,业务外观层,业务规则层,数据处理层,业务实体层,以前没有做过这样的分成结构所以不是很熟悉,再业务实体层的类都是继承DataSet的类,再继承的类里都先把表构建好了,也就是说我上面为什么说DataSet中的表有了,但是当我从数据库中取出表(查询),想把表的内容加到DataSet中去,因为我从数据库中只是取出表,先不加到DataSet中去,根据需要才加到对应的DataSet中去,所以出现这样的问题,