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 からのアドバイスから、Entity Framework Code-First 設計の 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 に答える