应该先将这两个DataTable合并一个new DataTable
然后 DataGrid.DataSource = new_DataTable;
DataGrid.DataBind();
就ok了。具体你参考一下:
http://www.dotnet247.com/247reference/msgs/2/14095.aspx
然后 DataGrid.DataSource = new_DataTable;
DataGrid.DataBind();
就ok了。具体你参考一下:
http://www.dotnet247.com/247reference/msgs/2/14095.aspx
protected void Page_Load(object sender, EventArgs e)
{ /* 从数据库中取出两张表的数据到dataset对象中 */
SqlConnection SqlCon = new SqlConnection(
"server=localhost;database=northwind;user id=sa;password=" );
SqlDataAdapter SqlDA = new SqlDataAdapter( "SELECT * FROM Products",
SqlCon );
DataSet ds = new DataSet();
SqlDA.Fill(ds, "Products");
SqlDA.SelectCommand = new SqlCommand( "SELECT * FROM Suppliers", SqlCon );
SqlDA.Fill( ds, "Suppliers" ); /* 为两个表建立表间关系 */
DataColumn ParentColumn = ds.Tables["Suppliers"].Columns["SupplierID"];
DataColumn ChildColumn = ds.Tables["Products"].Columns["SupplierID"];
DataRelation PCRelation = new DataRelation( "SuppliersProducts",
ParentColumn, ChildColumn );
ds.Relations.Add( PCRelation );
//调用函数生成一个datatable
DGPS.DataSource = (DataTable)CombineDataTables( ds.Tables["Suppliers"],
ds.Tables["Products"], PCRelation );
this.DataBind(); } //合并两个表的函数
protected DataTable CombineDataTables(DataTable dtParent, DataTable
dtChild, DataRelation drRelation)
{ /*父表第一列的列名*/
string ParentColumn = drRelation.ParentColumns[0].ToString(); /* 创建要返回的结果表(合并后的表格) */
DataTable dtSupProd = new DataTable(); /*创建结果表的列, 合并父表和子表的列*/
//首先根据父表的列创建列
for ( Int32 i = 0; i < dtParent.Columns.Count; i ++ )
{
dtSupProd.Columns.Add( new DataColumn(
dtParent.Columns[i].ColumnName ) );
}
//根据子表的列创建列
for ( Int32 i = 0; i < dtChild.Columns.Count; i ++ )
{
//消除两个表相同的列,只添加不相同的列,也就主外键是相同的列,这里是根据列名相同来消除
if ( dtChild.Columns[i].ColumnName != ParentColumn )
{
dtSupProd.Columns.Add( new DataColumn(
dtChild.Columns[i].ColumnName ) );
}
} /* 根据父表和子表来组装datatable */
DataRow dr; //根据父表的记录来取子表的数据
for ( Int32 iRow = 0; iRow < dtParent.Rows.Count; iRow++ )
{ /* 用GetChildRows方法,根据datarelation取子表的数据,放到datarow数组中,如果是一对多的关系,可能就有多条字记录 */
DataRow[] childrows = dtParent.Rows[iRow].GetChildRows(drRelation);
//循环的从datarow数组中取出子表中的数据
for ( Int32 iRowProd = 0; iRowProd < childrows.Length; iRowProd ++)
{ dr = dtSupProd.NewRow(); /*把列值填入到新表的新行中*/
//首先填父表的行的第一列数据
for ( Int32 iColSup = 0; iColSup < dtParent.Columns.Count; iColSup ++ )
{ dr[dtParent.Columns[iColSup].ColumnName] =
dtParent.Rows[iRow][iColSup].ToString(); } /* 填充子表每一列的数据 */ for ( Int32 iColProd = 0; iColProd < dtChild.Columns.Count; iColProd
++ )
{ if ( dtChild.Columns[iColProd].ColumnName != ParentColumn )
{
dr[dtChild.Columns[iColProd].ColumnName] =
childrows[iRowProd][iColProd].ToString(); } }
dtSupProd.Rows.Add(dr);
} }
/*Return DataTable*/
return dtSupProd;
}</script>