数据表复制在GridView中无法正确显示

时间:2015-01-17 09:44:35

标签: c# asp.net gridview datatable

我有一个存储过程实际上连接了2列并返回DataTable。 如下:

create procedure [dbo].[spEnqIDFyYear]
as
begin
select CONVERT(nvarchar(50),enq_id)+'/'+CONVERT(nvarchar(50),YEAR(fy_year)) as EnqIDFyYear from Sample.dbo.enquiry_details
end
GO

输出如下:

EnqIDFyYear
1/2015
2/2014

我有另一个程序,其输出如下:

profile_name
ProfileA
ProfileB

我将这两个程序绑定到2 DataTables,将这两个DataTables合并到第三个DataTable并将gridview绑定到protected void Page_Load(object sender, EventArgs e) { DataTable dt1 = PopulateDashBoardGrid1(); DataTable dt2 = PopulateDashBoardGrid2(); DataTable dt3 = new DataTable(); dt3 = dt1.Copy(); dt3.Merge(dt2); GridView1.DataSource = dt3; GridView1.DataBind(); } //Populate the main DashBoard Grid public DataTable PopulateDashBoardGrid1() { using (SqlConnection con = new SqlConnection(cs)) { SqlDataAdapter da = new SqlDataAdapter("spEnqIDFyYear", con); DataTable dt = new DataTable(); da.SelectCommand.CommandType = CommandType.StoredProcedure; da.Fill(dt); return dt; } } public DataTable PopulateDashBoardGrid2() { using (SqlConnection con = new SqlConnection(cs)) { SqlDataAdapter da = new SqlDataAdapter("spClientProfileName", con); DataTable dt = new DataTable(); da.SelectCommand.CommandType = CommandType.StoredProcedure; da.Fill(dt); return dt; } }

但是gridview没有表现得那么合适。它显示如下: enter image description here

行应该彼此对齐。如何实现呢?

背后的代码如下:

{{1}}

专家请帮忙。

此致 阿努拉格

1 个答案:

答案 0 :(得分:1)

您正在获得这种输出,因为如果列不是两个数据表的列,Merge会以这种方式工作。所以你需要编写一些自定义代码。

以下是我所拥有的: -

static DataTable MergeDataTables(DataTable dt1, DataTable dt2)
{
     DataTable dt3 = dt1.Copy();
     foreach (DataColumn dc in dt2.Columns)
     {
         dt3.Columns.Add(dc.ColumnName).DataType = dc.DataType;
     }

     for (int i = 0; i < dt3.Rows.Count; i++)
     {
         foreach (DataColumn dc in dt2.Columns)
         {
             string col = dc.ColumnName;
             dt3.Rows[i][col] = dt2.Rows[i][col];
         }
     }
     return dt3;
}

您可以调用此方法合并两个数据表。