日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁西西教程數(shù)據(jù)庫教程 → 將多個(gè)DataTable的合并成一個(gè)新表不同情況分析解決方案

      將多個(gè)DataTable的合并成一個(gè)新表不同情況分析解決方案

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2011/12/12 0:26:47字體大。A-A+

      作者:西西點(diǎn)擊:106次評(píng)論:0次標(biāo)簽: 數(shù)據(jù)庫

      • 類型:辦公軟件大。35KB語言:中文 評(píng)分:1.2
      • 標(biāo)簽:
      立即下載

      有時(shí)我們知道了兩個(gè)DataTable1和DataTable2,我們希望將它們合并為一個(gè)新的DataTable(下面的例子中命名為了newDataTable),這就分為兩種情況:DataTable1和DataTable2結(jié)構(gòu)相同、DataTable1和DataTable2結(jié)構(gòu)不同,下面分別介紹怎么進(jìn)行合并。

      一、DataTable1和DataTable2結(jié)構(gòu)相同的情況,結(jié)構(gòu)相同我們只需要把兩者的數(shù)據(jù)羅列到一塊就可以了

      首先初始化相同結(jié)構(gòu)DataTable(測(cè)試用的)

              void InitDataTable1(DataTable dt)
              {
                  dt.Columns.Add("student_no");
                  dt.Columns.Add("student_name");
                  dt.Rows.Add("001", "June");
                  dt.Rows.Add("002", "zhang");
                  dt.Rows.Add("003", "jun");
              }
              void InitDataTable2(DataTable dt)
              {
                  dt.Columns.Add("student_no");
                  dt.Columns.Add("student_name");
                  dt.Rows.Add("111", "ABC");
                  dt.Rows.Add("222", "XYZ");
                  dt.Rows.Add("333", "OPQ");
              }

      合并方法1:用Rows.Add方法

                  DataTable newDataTable = DataTable1.Clone();
      
                  object[] obj = new object[newDataTable.Columns.Count];
                  //添加DataTable1的數(shù)據(jù)
                  for (int i = 0; i < DataTable1.Rows.Count; i++)
                  {
                      DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
                      newDataTable.Rows.Add(obj);
                  }
                  //添加DataTable2的數(shù)據(jù)
                  for (int i = 0; i < DataTable2.Rows.Count; i++)
                  {
                      DataTable2.Rows[i].ItemArray.CopyTo(obj, 0);
                      newDataTable.Rows.Add(obj);
                  }

      合并方法2:用DataTable.ImportRow方法

                  //拷貝DataTable1的結(jié)構(gòu)和數(shù)據(jù)
                  DataTable newDataTable = DataTable1.Copy();
                  //添加DataTable2的數(shù)據(jù)
                  foreach (DataRow dr in DataTable2.Rows)
                  {
                      newDataTable.ImportRow(dr);
                  }

      其實(shí)添加DataTable1的結(jié)構(gòu)和數(shù)據(jù)有兩種方法

                  //克隆DataTable1的結(jié)構(gòu)
                  DataTable newDataTable = DataTable1.Clone();
      
                  object[] obj = new object[newDataTable.Columns.Count];
                  //添加DataTable1的數(shù)據(jù)
                  for (int i = 0; i < DataTable1.Rows.Count; i++)
                  {
                      DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
                      newDataTable.Rows.Add(obj);
                  }

      或者直接用自帶的Copy方法  DataTable newDataTable = DataTable1.Copy();
      二、DataTable1和DataTable2結(jié)構(gòu)不同相同的情況,我們可以先向新表中添加DataTable1的數(shù)據(jù),然后再向每行的后面添加添加DataTable2的數(shù)據(jù),注意兩者的行數(shù)不一定相同。

       首先初始化相同結(jié)構(gòu)DataTable(測(cè)試用的)

              void InitDataTable1(DataTable dt)
              {
                  dt.Columns.Add("student_no1");
                  dt.Columns.Add("student_name1");
                  dt.Rows.Add("001", "June");
                  dt.Rows.Add("002", "zhang");
                  //dt.Rows.Add("003", "jun");
              }
              void InitDataTable2(DataTable dt)
              {
                  dt.Columns.Add("student_no2");
                  dt.Columns.Add("student_name2");
                  dt.Rows.Add("111", "ABC");
                  dt.Rows.Add("222", "XYZ");
                  dt.Rows.Add("222", "ASD");
              }

      (1)先添加第一個(gè)表,再添加第二個(gè)表

              /// <summary> 
              /// 將兩個(gè)列不同(結(jié)構(gòu)不同)的DataTable合并成一個(gè)新的DataTable 
              /// </summary> 
              /// <param name="DataTable1">表1</param> 
              /// <param name="DataTable2">表2</param> 
              /// <param name="DTName">合并后新的表名</param> 
              /// <returns>合并后的新表</returns> 
              private DataTable UniteDataTable(DataTable DataTable1, DataTable DataTable2, string DTName)
              {
                  //克隆DataTable1的結(jié)構(gòu)
                  DataTable newDataTable = DataTable1.Clone();
                  for (int i = 0; i < DataTable2.Columns.Count; i++)
                  {
                      //再向新表中加入DataTable2的列結(jié)構(gòu)
                      newDataTable.Columns.Add(DataTable2.Columns[i].ColumnName);
                  }
                  object[] obj = new object[newDataTable.Columns.Count];
                  //添加DataTable1的數(shù)據(jù)
                  for (int i = 0; i < DataTable1.Rows.Count; i++)
                  {
                      DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
                      newDataTable.Rows.Add(obj);
                  }
      
                  if (DataTable1.Rows.Count >= DataTable2.Rows.Count)
                  {
                      for (int i = 0; i < DataTable2.Rows.Count; i++)
                      {
                          for (int j = 0; j < DataTable2.Columns.Count; j++)
                          {
                              newDataTable.Rows[i][j + DataTable1.Columns.Count] = DataTable2.Rows[i][j].ToString();
                          }
                      }
                  }
                  else
                  {
                      DataRow dr3;
                      //向新表中添加多出的幾行
                      for (int i = 0; i < DataTable2.Rows.Count - DataTable1.Rows.Count; i++)
                      {
                          dr3 = newDataTable.NewRow();
                          newDataTable.Rows.Add(dr3);
                      }
                      for (int i = 0; i < DataTable2.Rows.Count; i++)
                      {
                          for (int j = 0; j < DataTable2.Columns.Count; j++)
                          {
                              newDataTable.Rows[i][j + DataTable1.Columns.Count] = DataTable2.Rows[i][j].ToString();
                          }
                      }
                  }
                  newDataTable.TableName = DTName; //設(shè)置DT的名字 
                  return newDataTable;

      (2)先添加行數(shù)多的表。其實(shí)我們也可以先判斷哪個(gè)表的行數(shù)多,就先添加哪個(gè)表,然后再添加行少的表就可以了。

              /// <summary> 
              /// 將兩個(gè)列不同(結(jié)構(gòu)不同)的DataTable合并成一個(gè)新的DataTable 
              /// </summary> 
              /// <param name="DataTable1">表1</param> 
              /// <param name="DataTable2">表2</param> 
              /// <param name="DTName">合并后新的表名</param> 
              /// <returns>合并后的新表</returns> 
              private DataTable UniteDataTable2(DataTable DataTable1, DataTable DataTable2, string DTName)
              {
                  DataTable newDataTable = new DataTable();
                  if (DataTable1.Rows.Count > DataTable2.Rows.Count)
                  {
                      newDataTable = FillData(DataTable1, DataTable2);
                  }
                  else
                  {
                      newDataTable = FillData(DataTable2, DataTable1);
                  }
      
                  newDataTable.TableName = DTName; //設(shè)置DT的名字 
                  return newDataTable;
              }
      
              private DataTable FillData(DataTable dt1, DataTable dt2)
              {
                  //克隆DataTable1的結(jié)構(gòu)
                  DataTable newDataTable = dt1.Clone();
                  for (int i = 0; i < dt2.Columns.Count; i++)
                  {
                      //再向新表中加入DataTable2的列結(jié)構(gòu)
                      newDataTable.Columns.Add(dt2.Columns[i].ColumnName);
                  }
                  object[] obj = new object[newDataTable.Columns.Count];
                  //添加DataTable1的數(shù)據(jù)
                  for (int i = 0; i < dt1.Rows.Count; i++)
                  {
                      dt1.Rows[i].ItemArray.CopyTo(obj, 0);
                      newDataTable.Rows.Add(obj);
                  }
                  for (int i = 0; i < dt2.Rows.Count; i++)
                  {
                      for (int j = 0; j < dt2.Columns.Count; j++)
                      {
                          newDataTable.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();
                      }
                  }
                  return newDataTable;
              }

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)