Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to store multiple datatable into a single dataset

I have multiple datatable. I want to show all the datatable rows into a single gridview. How can I do that?

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();

The column names for both datatable are the same. Here I was trying to use dataset but only first DataTable i.e. datbag101 was showing in the gridview.

How can I show all the values in one gridview?

like image 527
Manish Sasmal Avatar asked May 02 '26 06:05

Manish Sasmal


1 Answers

Provided that your two data tables have the same columns, you can UNION them with some handy LINQ.

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

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

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

Otherwise try use DataTable.Merge:

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

dtbag101.Merge(dtwallet111, true);

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

I'm not sure why this isn't working for you. Try this method (grabbed from here):

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

Call the method with your two datatables:

GridView1.DataSource = Union(dtbag101, dtwallet111);
like image 69
Dave New Avatar answered May 04 '26 20:05

Dave New