2013-01-08 18 views
0

對於MVC和一般編程,我非常陌生,而且我無法從SQL Server數據庫將數據加載到MVC3應用程序中。我無法讓它與模型一起工作,所以我只有一個控制器和一個視圖。代碼如下所示:將數據從SQL Server數據庫加載到DataTable中,並在MVC3中顯示圖表

控制器:

public ActionResult Datatable() 
{ 
    string conn = System.Configuration.ConfigurationManager.ConnectionStrings["SampleDBConn"].ToString(); 
    SqlConnection connect = new SqlConnection(conn); 
    connect.Open(); 

    SqlCommand RID = new SqlCommand("SELECT Request_ID FROM SampleDB.dbo.Transactions", connect); 
    SqlCommand Tdate = new SqlCommand("SELECT Trans_Date FROM SampleDB.dbo.Transactions", connect); 
    SqlCommand MID = new SqlCommand("SELECT Merchant_ID FROM SampleDB.dbo.Transactions", connect); 
    SqlCommand Ttype = new SqlCommand("SELECT Trans_Type FROM SampleDB.dbo.Transactions", connect); 
    SqlCommand Tamt = new SqlCommand("SELECT Total_Amt FROM SampleDB.dbo.Transactions", connect); 

    DataTable dt = new DataTable("MyTable"); 
    dt.Columns.Add(new DataColumn("Request_ID", typeof(SqlCommand))); 
    dt.Columns.Add(new DataColumn("Trans_Date", typeof(SqlCommand))); 
    dt.Columns.Add(new DataColumn("Merchant_ID", typeof(SqlCommand))); 
    dt.Columns.Add(new DataColumn("Trans_Type", typeof(SqlCommand))); 
    dt.Columns.Add(new DataColumn("Total_Amt", typeof(SqlCommand))); 

     DataRow row = dt.NewRow(); 
     row["Request_ID"] = RID; 
     row["Trans_Date"] = Tdate; 
     row["Merchant_ID"] = MID; 
     row["Trans_Type"] = Ttype; 
     row["Total_Amt"] = Tamt; 
     dt.Rows.Add(row); 

    connect.Close(); 
    return View(dt); 
} 

查看:

@model System.Data.DataTable 

    @{ 
     ViewBag.Title = "Datatable"; 
     Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 

    <h2> Datatable </h2> 

    < div id="header" ></div> 

    < br/> 

    < style type"text/css" > 

     #DT1{display:inline} 

    </style> 

    < table border="1" id="DT1" style="background-color: Lime" > 

     < thead style="background-color:Olive" > 
      <tr> 

      @foreach (System.Data.DataColumn col in Model.Columns) 
      { 
        <th>@col.Caption</th> 
      } 
      </tr> 

     </thead> 

     <tbody> 

      @foreach (System.Data.DataRow row in Model.Rows) 
      { 
       <tr> 
        @foreach (var cell in row.ItemArray) 
        { 
         <td>@cell.ToString()</td> 
        } 
       </tr> 
      } 
     </tbody> 
    </table> 

結果表顯示每一列是這樣的:

​​

其中 「REQUEST_ID」 是列標題和「System.Data.SqlClient.SqlCommand」是數據應該是的位置

我從另一個計算器解決方案中使用這種方法: Displaying standard DataTables in MVC

我的應用程序的最終目標是通過複選框或下拉列表中動態查詢我的數據庫顯示的圖表,我還需要爲能夠將數據導出到excel文件。如果有人對我應該如何處理這個問題有任何想法或建議,將不勝感激。

我已經能夠使用存儲過程使用此方法來靜態地創建圖表:

@{ 
     ViewBag.Title = "Chart1"; 
    } 

    <h2>Chart1</h2> 
    @{ 
      var db = Database.Open("SampleDBConn"); 
      var dbdata = db.Query("August2012byMerch"); 

      var myChart = new Chart(width: 1100, height: 600, theme: ChartTheme.Green) 
      .AddTitle("Merchant Totals by Transaction Type: August 2012") 
      .AddSeries("Default", 
      xValue: dbdata, xField: "Transaction Type", 
      yValues: dbdata, yFields: "Total") 
      .Write(); 
      db.Close(); 
     } 

謝謝!

+0

在我看來,我認爲你應該嘗試從0. – Jorge

+0

@Jorge瞭解框架我得到的框架。構建處理數據的模型,然後使用控制器作爲協調器將模型傳遞給視圖。然後視圖顯示數據。我剛剛爲此建立了模型,所以我試圖通過一種方法來了解可以做什麼和不可以做什麼 – gbills

+1

通常,您的模型是一個簡單的POCO。與其試圖將DataTable用作模型,我會添加一個數據層(查看存儲庫和工作單元設計模式),返回您將在模型中使用的POCO。 EF非常適合這一點。 –

回答

0

我發現了一個解決方案,只要DataTable一直工作。

從評論部分凱文的建議,我使用了實體框架代碼優先設計的POCO模型。 同時研究讓我在這裏獲得一個很好的教程 - >http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-4

我基於我的模型關閉了本教程,然後對其進行了一些修改以滿足我的需求。

這裏是模型:

namespace Example_1.Models 
    { 
     public class Transaction 
     { 
      [Key] 
      public int TID { get; set; } 
      public DateTime TDate { get; set; } 
      public decimal TAmt { get; set; } 
      public string Trans_Type { get; set; } 
      public int MID { get; set; } 
     } 
    } 

    namespace Example_1.Models 
    { 
     public class Merchants 
     { 
      [Key] 
      public int MID { get; set; } 
      public string Merchant { get; set; } 
      public List<Transaction> Transactions { get; set; } 
     } 
    } 
    namespace Example_1.Models 
    { 
     public class SampleDBEntities : DbContext 
     { 
      public DbSet<Transaction> Transactions { get; set; } 
      public DbSet<Merchants> Merchants { get; set; } 
     } 
    } 

的SampleDBEntities類必須在web.config文件中的連接字符串相匹配。雖然Transactions類和Merchants類必須匹配我的數據庫中設置的變量。

這裏是控制器:

 public ActionResult Browse(string Merchant) 
    { 
     var mercmodel = sampledb.Merchants.Include("Transactions") 
      .SingleOrDefault(g => g.Merchant == Merchant); 
     return View(mercmodel); 
    } 

商人變量必須在你的URL的路徑相匹配。比如我這個網址是 「http://localhost:64269/Transaction/Browse?Merchant=ISCO_CA

然後在視圖中,我構建了一個表,我通過我的數據爲:

<script src="@Url.Content("~/Scripts/sorttable.js")" type="text/javascript"> </script> 


    @model Example_1.Models.Merchants 

    @{ 
     ViewBag.Title = "Browse"; 
    } 


    <h2>Browse</h2> 

     <h3>Transactions: @Model.Merchant</h3> 
    <table class="sortable"> 
    <tr> 
    <th>ID</th> 
    <th>Date</th> 
    <th>Merchant</th> 
    <th>Amount</th> 
    </tr> 
     @foreach (var transaction in Model.Transactions) 
     { 
      <tr> 
       <td> 
       @transaction.TID 
      </td> 
      <td> 
       @transaction.TDate 
      </td> 
      <td> 
       @transaction.Trans_Type 
      </td> 
      <td> 
       [email protected] 
      </td> 
      </tr> 
     } 
    </table> 

這將顯示一個漂亮的餐桌,看起來像這樣:

MyTable

相關問題