C# 如何将多个datatable存储到单个数据集中

C# 如何将多个datatable存储到单个数据集中,c#,asp.net,ado.net,C#,Asp.net,Ado.net,我有多个数据表。我想在一个gridview中显示所有datatable行。 我该怎么做 DataTable dtbag101 = (DataTable)Session["bag101"]; DataTable dtwallet111 = (DataTable)Session["wallet111"]; DataSet ds= new DataSet(); ds.Tables.Add(dtbag101); ds.Tables.Add(dtwallet111); GridView1.DataS

我有多个数据表。我想在一个gridview中显示所有datatable行。 我该怎么做

DataTable dtbag101 = (DataTable)Session["bag101"];
DataTable dtwallet111 = (DataTable)Session["wallet111"];


DataSet ds= new DataSet();
ds.Tables.Add(dtbag101);
ds.Tables.Add(dtwallet111);

GridView1.DataSource= ds;
GridView1.DataBind();
两个datatable的列名相同。 在这里,我试图使用dataset,但gridview中只显示了第一个DataTable,即datbag101

如何在一个gridview中显示所有值?

您可能需要使用

编辑以显示它应该如何工作


如果两个数据表具有相同的列,则可以使用一些方便的LINQ将它们合并

DataTable dtbag101 = (DataTable)Session["bag101"];
DataTable dtwallet111 = (DataTable)Session["wallet111"];

var result = dtbag101.AsEnumerable().Union(dtwallet111.AsEnumerable());

GridView1.DataSource = result;
GridView1.DataBind();
否则请尝试使用数据表。合并:

DataTable dtbag101 = (DataTable)Session["bag101"];
DataTable dtwallet111 = (DataTable)Session["wallet111"];

dtbag101.Merge(dtwallet111, true);

GridView1.DataSource = dtbag101;
GridView1.DataBind();
我不知道为什么这对你不起作用。尝试此方法(从以下位置获取):


您可以简单地使用方法

DataTable dtbag101 = (DataTable)Session["bag101"];
DataTable dtwallet111 = (DataTable)Session["wallet111"];

dtbag101.Merge(dtwallet111);  //Merge action

GridView1.DataSource= dtbag101;
GridView1.DataBind();
我对此不太了解。我刚把它转过来

或其他

尝试循环

DataSet ds = new DataSet();
addTables(dtbag101);
addTables(dtwallet111); //ds will be merge of both tables here

private void addTables(DataTable dt)
{
对于(int intCount=ds.Tables[0].Rows.Count;intCount
我想一次显示所有值。。它只显示了一次@Adilno合并方法不起作用。你能告诉我其他的方法或过程吗@AdilIt应该可以工作,我为你做了一个例子,并在问题中添加了。嘿,用
DataTable.Merge
尝试一下这个更新过的答案。不,先生,只显示gridview标题文本。但没有数据显示。我正在尝试合并方法。您确定您的第二个数据表中有数据吗?试试看:
GridView1.DataSource=dtwallet111首先,我没有使用正确的cmd格式,这就是它不工作的原因。。对不起,谢谢。现在,如果一次只有一个数据表可用,那么它不会显示任何内容。我该怎么做??
public static DataTable Union(DataTable First, DataTable Second)
{
      //Result table
      DataTable table = new DataTable("Union");

      //Build new columns
      DataColumn[] newcolumns = new DataColumn[First.Columns.Count];

      for(int i=0; i < First.Columns.Count; i++)
      {
          newcolumns[i] = new DataColumn(
          First.Columns[i].ColumnName, First.Columns[i].DataType);
      }

      table.Columns.AddRange(newcolumns);
      table.BeginLoadData();

      foreach(DataRow row in First.Rows)
      {
           table.LoadDataRow(row.ItemArray,true);
      }

      foreach(DataRow row in Second.Rows)
      {
          table.LoadDataRow(row.ItemArray,true);
      }

      table.EndLoadData();
      return table;
}
GridView1.DataSource = Union(dtbag101, dtwallet111);
DataTable dtbag101 = (DataTable)Session["bag101"];
DataTable dtwallet111 = (DataTable)Session["wallet111"];

dtbag101.Merge(dtwallet111);  //Merge action

GridView1.DataSource= dtbag101;
GridView1.DataBind();
DataSet ds = new DataSet();
addTables(dtbag101);
addTables(dtwallet111); //ds will be merge of both tables here
private void addTables(DataTable dt)
{
   for(int intCount = ds.Tables[0].Rows.Count; intCount < dt.Rows.Count;intCount++)
   {
       for(int intSubCount = 0;intSubCount < dt.Columns.Count; intSubCount++)
       {
          ds.Tables[0].Rows[intCount][intSubCount] = dt.Rows[intCount][intSubCount];
       }
   }
}