[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>ASP.NET MVCの利用方法]] * 目次 [#s45f73d0] #contents *概要 [#f89c6a73] [[ASP.NET MVC]]で[[Entity Framework]]をキャンセルした場合の選択肢として~ [[ASP.NET MVC]] + DataTableが必要なため、本項にコレを纏めた。 *通常の処理 [#wfdbf816] 通常通りViewに持って行って処理可能。 -c# - Displaying standard DataTables in MVC - Stack Overflow~ http://stackoverflow.com/questions/2243898/displaying-standard-datatables-in-mvc --[[ASP.NET MVC]]でDataTableの併用は問題ない。 There is nothing about MVC that prevents you from using ADO.NET. --以下は、 ---「[[ASP.NET MVC]]でDataTableを使用するのがベストプラクティスでは無い。」と言っているのでは無くて、 ---「Controllerでデータを作成するのがベストプラクティスでは無い。」と言っているので、 >>お間違いなきよう。 Now, I'm violating a whole lot of principles and "best-practices" of ASP.NET MVC here, so please understand this is just a simple demonstration. ただし、双方向バインディング等は不可能なので、~ 単一レコードの処理を行う場合等はPOCOのViewModelを作成する。 *Grid系の処理 [#c93ef3ee] **foreach [#z5b569b0] foreach で処理可能。 -c# - Displaying standard DataTables in MVC - Stack Overflow~ http://stackoverflow.com/questions/2243898/displaying-standard-datatables-in-mvc **[[WebGrid>ASP.NET MVCのWebGrid]] [#v5946716] [[WebGrid>ASP.NET MVCのWebGrid]]のコンストラクタの第一引数の~ sourceは、IEnumerableをサポートする必要があるので、~ DataTable使用時は、型の変換が必要がになるもよう。 ***IEnumerable<DataRow> ではダメ。[#r2be74e6] 以下でIEnumerable<DataRow>に変換可能。 var result = dt.AsEnumerable(); しかし、このresultはWebGridで使用できない。 理由はこのDataRowのpublic propertyが、 -RowError property -HasError property であるためのもよう。 詳しくは、下記参照。 -DataTableExtensions.AsEnumerable メソッド (DataTable) (System.Data)~ https://msdn.microsoft.com/ja-jp/library/system.data.datatableextensions.asenumerable.aspx -WebGrid and DataTable | The ASP.NET Forums~ https://forums.asp.net/t/1673391.aspx?WebGrid%20and%20DataTable ***List<dynamic> を使用する。[#qeaf6181] List<dynamic>に、(IDictionary<string, object>) ExpandoObjectを追加していく。 var result = new List<dynamic>(); foreach (DataRow row in table.Rows) { var obj = (IDictionary<string, object>)new ExpandoObject(); foreach (DataColumn col in table.Columns) { obj.Add(col.ColumnName, row[col.ColumnName]); } result.Add(obj); } -参考 --MVC Web Grid using Dynamic Data Table~ http://www.c-sharpcorner.com/code/2910/mvc-web-grid-using-dynamic-data-table.aspx --asp.net mvc 3 - Populate MVC Webgrid from DataTable - Stack Overflow~ http://stackoverflow.com/questions/6168548/populate-mvc-webgrid-from-datatable --asp.net mvc 3 webgrid bound to List<dynamic> is exceedingly slow - Stack Overflow~ http://stackoverflow.com/questions/17322239/asp-net-mvc-3-webgrid-bound-to-listdynamic-is-exceedingly-slow **ポストバック的な動作がある場合 [#k5d5c756] ***Sessionに格納しておく。 [#j8310e04] 削除しないとメモリを食う。 ***Hidennに格納しておく。 [#mbcc3a3c] Hiddenにバイナリ・シリアライズしたDataTableのBase64エンコーディングを保存。 ***都度、DBから取得する。 [#zb981cbd] オーバーヘッドがある。