当前位置: 代码迷 >> ASP.NET >> 无法从“string”转换为“System.Data.DataColumn[]解决方法
  详细解决方案

无法从“string”转换为“System.Data.DataColumn[]解决方法

热度:2835   发布时间:2013-02-25 00:00:00.0
无法从“string”转换为“System.Data.DataColumn[]
protected void Button1_Click(object sender, EventArgs e)
  {
  DataTable dsIIS = new DataTable();
  DataTable dsSwt = new DataTable();
  dsIIS = it.IISMatch();
  dsSwt = vt.SwtMatch();

  DataTable dsIISSwt = new DataTable();

  dsIISSwt = Join(dsIIS, dsSwt,"id","visistorId");

   
  }
----------------------------------------
public DataTable Join(DataTable First, DataTable Second, DataColumn[] FJC, DataColumn[] SJC)
  {

  //创建一个新的DataTable

  DataTable table = new DataTable("Join");


  // Use a DataSet to leverage DataRelation

  using (DataSet ds = new DataSet())
  {

  //把DataTable Copy到DataSet中

  ds.Tables.AddRange(new DataTable[] { First.Copy(), Second.Copy() });

  DataColumn[] parentcolumns = new DataColumn[FJC.Length];

  for (int i = 0; i < parentcolumns.Length; i++)
  {

  parentcolumns[i] = ds.Tables[0].Columns[FJC[i].ColumnName];

  }

  DataColumn[] childcolumns = new DataColumn[SJC.Length];

  for (int i = 0; i < childcolumns.Length; i++)
  {

  childcolumns[i] = ds.Tables[1].Columns[SJC[i].ColumnName];

  }


  //创建关联

  DataRelation r = new DataRelation(string.Empty, parentcolumns, childcolumns, false);

  ds.Relations.Add(r);


  //为关联表创建列

  for (int i = 0; i < First.Columns.Count; i++)
  {

  table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType);

  }

  for (int i = 0; i < Second.Columns.Count; i++)
  {

  //看看有没有重复的列,如果有在第二个DataTable的Column的列明后加_Second

  if (!table.Columns.Contains(Second.Columns[i].ColumnName))

  table.Columns.Add(Second.Columns[i].ColumnName, Second.Columns[i].DataType);

  else

  table.Columns.Add(Second.Columns[i].ColumnName + "_Second", Second.Columns[i].DataType);

  }


  table.BeginLoadData();

  foreach (DataRow firstrow in ds.Tables[0].Rows)
  {

  //得到行的数据

  DataRow[] childrows = firstrow.GetChildRows(r);

  if (childrows != null && childrows.Length > 0)
  {

  object[] parentarray = firstrow.ItemArray;

  foreach (DataRow secondrow in childrows)
  {

  object[] secondarray = secondrow.ItemArray;

  object[] joinarray = new object[parentarray.Length + secondarray.Length];

  Array.Copy(parentarray, 0, joinarray, 0, parentarray.Length);

  Array.Copy(secondarray, 0, joinarray, parentarray.Length, secondarray.Length);

  table.LoadDataRow(joinarray, true);
  相关解决方案