垂直显示所选列

时间:2015-12-04 18:32:31

标签: c# ms-access datagridview

我有一个名为orders的表。

我想显示所订购产品数量的Order DateSumproduct_name

以下是我想要显示的数据:

Data to Display

如上所述,我希望水平显示产品名称,产品订单的总和按日期垂直显示。

我正在使用C#和MS Access数据库。

我可以在gridview中逐行显示数据。这是代码:

 private void btn_all_orders_Click(object sender, EventArgs e)
{
    try
    {
       connection.open
       OleDbCommand command = new OleDbcommand();
       command.connection = connection;
       string query = "select order_date as 'Order Date', product_name as       
       'Items', Sum(order_quantity) as 'No of Orders' from order where cust_id = 
       '" + txt_cust_id.Text + "' group by order_date, product_name";
       command.commandText = query;
       OleDbDataAdapter da = new OleDbDataAdapter(command);
       DataTable dt = new DataTable();
       da.Fill(dt);
       datagridview.DataSource = dt;
       connectionn.Close();
    }
    catch (Exception ex)
    { 
      Messagebox.Show("Error " + ex);
      connection.Close();
    }
}

如何更改此内容以实现上述目标?

1 个答案:

答案 0 :(得分:0)

我认为你要求的是:

enter image description here

您需要做的是在您的数据表中添加一列。 Then add an expression to that column it.

  da.Fill(dt);
   dt.Columns.Add("TOTAL");
  dt.Columns("Total").Expression = "Count(Product1) + Count(Product2) + Count(Product3)";

   datagridview.DataSource = dt;
   connectionn.Close();

底部的总数来自您的SelectQuery =>总和(order_quantity)。您可以修改查询以摆脱它。

一些信息 Of course the query could be changed so that it returns a computed column back and then you do not need to do it in the datatable.

Actual SQL for changing the query so that it returns a computed column back - https://stackoverflow.com/questions/3932205/to-calculate-sum-two-alias-named-columns-in-sql

上面的代码是伪未经测试的代码 - 所以请阅读链接。

修改 你也可以看看这里:Display Data Vertically in the DataGridview 要发布的代码太多,但基本上真正的工作是通过翻转数据集完成的 - 正如Gamal先生所做的那样。

public DataSet FlipDataSet(DataSet my_DataSet)
{
 DataSet ds = new DataSet();

 foreach (DataTable dt in my_DataSet.Tables)
 {
   DataTable table = new DataTable();

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

   DataRow r;
   for (int k = 0; k < dt.Columns.Count; k++)
   { 
     r = table.NewRow();
     r[0] = dt.Columns[k].ToString();
     for (int j = 1; j <= dt.Rows.Count; j++)
     {  r[j] = dt.Rows[j - 1][k]; }
     table.Rows.Add(r);
   }
   ds.Tables.Add(table);
 }

 return ds;
}