如何将多个数据表存储到一个数据集中

3

我有多个数据表格。我想把所有数据表格的行显示在一个网格视图中。如何做到这一点?

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的列名相同。我尝试使用数据集,但只有第一个datatable即datbag101显示在gridview中。

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


嘿,试试这个DataTable.Merge - Mr_Green
3个回答

1

假设您的两个数据表具有相同的列,您可以使用一些方便的LINQ将它们UNION起来。

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

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

GridView1.DataSource = result;
GridView1.DataBind();

否则尝试使用DataTable.Merge:
DataTable dtbag101 = (DataTable)Session["bag101"];
DataTable dtwallet111 = (DataTable)Session["wallet111"];

dtbag101.Merge(dtwallet111, true);

GridView1.DataSource = dtbag101;
GridView1.DataBind();

我不确定为什么这对你不起作用。尝试使用这种方法(从此处获取):

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.Merge 更新答案。 - Dave New
不好意思,只有GridView的标题文本显示出来了,但是没有数据显示。我正在尝试使用Merge方法。 - Manish Sasmal
你确定你的第二个数据表中有数据吗?尝试使用以下代码来查找:GridView1.DataSource = dtwallet111; - Dave New
起初我没有使用正确的命令格式,所以它没有工作。抱歉并感谢。 - Manish Sasmal
现在如果一次只有一个数据表可用,则不会显示任何内容。我该怎么做呢? - Manish Sasmal

1
您可以简单地使用DataTable.Merge方法。
DataTable dtbag101 = (DataTable)Session["bag101"];
DataTable dtwallet111 = (DataTable)Session["wallet111"];

dtbag101.Merge(dtwallet111);  //Merge action

GridView1.DataSource= dtbag101;
GridView1.DataBind();

我对此不是很了解,刚刚才被提到。

或者

尝试使用for循环。

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];
       }
   }
}

0

你可能需要使用DataTable.Merge

DataTable dtAll = new DataTable();
dtAll = dtbag101 .Copy();
dtAll.Merge(dtwallet111, true);
GridView1.DataSource= dtAll;
GridView1.DataBind();

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

private void BindGridWithMergeTables()
{
    DataTable dt1 = new DataTable();
    DataTable dt2 = new DataTable();

    dt1.Columns.Add("ID");
    dt2.Columns.Add("ID");

    DataRow dr1 = dt1.NewRow();
    DataRow dr2 = dt2.NewRow();

    dr1["ID"] = "1";
    dr2["ID"] = "2";
    dt1.Rows.Add(dr1);
    dt2.Rows.Add(dr2);

    DataTable dtAll = new DataTable();
    dtAll = dt1.Copy();
    dtAll.Merge(dt2, true);
    dataGridView1.DataSource = dtAll;
    dataGridView1.DataBind();

}

1
我想一次性显示所有的值,它只显示了一个。@Adil - Manish Sasmal
没有合并方法可用。你能告诉我其他的方法或者流程吗?@Adil - Manish Sasmal
应该可以工作,我为您制作了一个示例并添加在问题中。 - Adil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接