0

我对 MVC 和一般编程非常陌生,并且在将数据从 SQL Server 数据库加载到我的 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

其中“Request_Id”是列标题,“System.Data.SqlClient.SqlCommand”是数据应该存放的位置

我从另一个 stackoverflow 解决方案中使用了这种方法: 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();
       }

谢谢!

4

1 回答 1

0

就 DataTable 而言,我找到了一个对我有用的解决方案。

根据 Kevin 在评论部分的建议,我使用了带有实体框架代码优先设计的 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);
    }

Merchant 变量必须与您的 URL 中采用的路径相匹配。例如,我的 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>
               $@transaction.TAmt
            </td>
          </tr>
        }
     </table>

这显示了一个漂亮的表格,如下所示:

我的表

于 2013-01-16T15:39:21.167 回答