应该先将这两个DataTable合并一个new DataTable
然后 DataGrid.DataSource = new_DataTable;
     DataGrid.DataBind();
就ok了。具体你参考一下:
http://www.dotnet247.com/247reference/msgs/2/14095.aspx

解决方案 »

  1.   

    我看了一下楼上的兄弟提供的网址,非常不错,谢谢!我把它作了一个中文的注释,也在学习,我把它贴出来:
    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>