2012-11-16 122 views
3

我有多個數據表。我想要顯示所有的數據錶行到一個gridview。 我該怎麼做?如何將多個數據表存儲到單個數據集中

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,即datbag101顯示在gridview中。

如何顯示一個gridview中的所有值?

+0

哎一次嘗試這個[**'DataTable.Merge' **](http://msdn.microsoft .com/en-us/library/2wfzxak4(vs.71).aspx) –

回答

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 –

+0

我已經更新了我的答案,請看看。 – Adil

+0

沒有合併方法不起作用。你能告訴我其他方法或過程嗎? @Adil –

1

只要您的兩個數據表具有相同的列,可以UNION他們提供一些方便的LINQ。

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

我不知道這是爲什麼不爲你工作。試試這個方法(從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; 
} 

調用方法與你的兩個數據表:

GridView1.DataSource = Union(dtbag101, dtwallet111); 
+0

沒有行顯示.. @ davenewza –

+0

用'DataTable.Merge'更新了答案。 – davenewza

+0

no sir只顯示gridview標題文本。但沒有數據顯示。我正在嘗試合併方法。 –

1

您可以簡單地使用DataTable.Merge方法

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]; 
     } 
    } 
} 
相關問題