2013-02-27 65 views
1

我有下面的代码显示在GridView列,行号:GridView控件显示标题,而不是列asp.net C#

代码背后:

protected void Page_Load(object sender, EventArgs e) 
{ 
    gvOrdersProcessed.DataSource = FlipDataTable(BindOrdersProcessed()); 
    gvOrdersProcessed.DataBind(); 
} 

public DataTable BindOrdersProcessed() 
{ 
    SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["WO_StatusConnectionString"].ToString()); 
    SqlCommand Cmd = new SqlCommand("sp_B2B_GetOrdersProcessed", Conn); 
    Cmd.CommandType = CommandType.StoredProcedure;   

    SqlDataAdapter ada = new SqlDataAdapter(Cmd); 
    DataTable dt = new DataTable(); 
    ada.Fill(dt); 
    return dt; 
} 

public DataTable FlipDataTable(DataTable dt) 
{ 
    DataTable table = new DataTable(); 

    //Get all the rows and change into columns 
    for (int i = 0; i <= dt.Rows.Count; i++)    
     table.Columns.Add(Convert.ToString(i));    

    DataRow dr; 

    //get all the columns and make it as rows 
    for (int j = 0; j < dt.Columns.Count; j++) 
    { 
      dr = table.NewRow(); 
      dr[0] = dt.Columns[j].ToString(); 
      for (int k = 1; k <= dt.Rows.Count; k++) 
       dr[k] = dt.Rows[k - 1][j]; 
      table.Rows.Add(dr); 
    } 

    return table; 
} 

在我的html :

<div id="GridOrdersProcessed"> 
     <asp:GridView ID="gvOrdersProcessed" runat="server"> 
     </asp:GridView> 
    </div> 

现在运行的时候我上面有一个数字作为标题:

0     1   2   3   4   5   6 
DateCreate   02/11/2013 02/19/2013 02/21/2013 02/25/2013 02/26/2013 02/27/2013 
OrdersPendingInvoice 0   0   0   0   0   0 
OrdersPendingPickUp 1   1   2   1   7   9 

这是为什么发生?

另外,我怎么可以添加一个新列的总订单象下面这样:

DateCreate   Total 02/11/2013 02/19/2013 02/21/2013 02/25/2013 02/26/2013 02/27/2013 
OrdersPendingInvoice 0  0   0   0   0   0   0 
OrdersPendingPickUp 21 1   1   2   1   7   9 

回答

1

你得到的数字作为标题,因为你已经创建了数字的名字在这里DataColumns:

public DataTable FlipDataTable(DataTable dt) 
{ 
    DataTable table = new DataTable(); 
    //Get all the rows and change into columns 
    for (int i = 0; i <= dt.Rows.Count; i++) 
     table.Columns.Add(Convert.ToString(i)); 

你可能想要像这样:

for (int i = 0; i < dt.Rows.Count; i++) 
    table.Columns.Add(Convert.ToString(dt.Rows[i][0])); 

请注意,我已经改变d <=i <

编辑:但我怕,该方法没有什么它应该做的(反向行和列也被称为支点的角色)。

您可以使用此扩展方法:

public static DataTable Pivot(this DataTable tbl) 
{ 
    var tblPivot = new DataTable(); 
    tblPivot.Columns.Add(tbl.Columns[0].ColumnName); 
    for (int i = 1; i < tbl.Rows.Count; i++) 
    { 
     tblPivot.Columns.Add(Convert.ToString(i)); 
    } 
    for (int col = 0; col < tbl.Columns.Count; col++) 
    { 
     var r = tblPivot.NewRow(); 
     r[0] = tbl.Columns[col].ToString(); 
     for (int j = 1; j < tbl.Rows.Count; j++) 
      r[j] = tbl.Rows[j][col]; 

     tblPivot.Rows.Add(r); 
    } 
    return tblPivot; 
} 

更新也许这LINQ查询可以帮助你转动表之前得到您的总列:

int OrdersPendingInvoiceTotal= tbl.AsEnumerable() 
    .Sum(r => r.Field<int>("OrdersPendingInvoice")); 
int OrdersPendingPickUpTotal= tbl.AsEnumerable() 
    .Sum(r => r.Field<int>("OrdersPendingPickUp")); 
+0

谢谢蒂姆,我刚刚发现您的方法和我的方法都必须在数据透视表中使用'ShowHeader =“false”',并使用'DataBound'事件将css样式应用于标题。有关如何为总计添加新列的任何想法? – Somebody 2013-02-27 20:37:31

+0

@Somebody:您必须在第二个位置的“Pivot”方法中添加总列。我使用Linq来计算总数。 – 2013-02-27 20:53:21

+0

谢谢!那工作完美:) – Somebody 2013-02-27 20:54:43