- 追加された行はこの色です。
- 削除された行はこの色です。
[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>ASP.NET MVCの利用方法]]
* 目次 [#s45f73d0]
#contents
*概要 [#f89c6a73]
[[ASP.NET MVC]]で[[Entity Framework]]をキャンセルした場合の選択肢として~
[[ASP.NET MVC]] + DataTableが必要なため、本項にコレを纏めた。
*通常の処理 [#wfdbf816]
**通常通りViewに持って行って処理可能。 [#b63d57a5]
-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.
**ただし、双方向バインディング等は不可能 [#m91239fa]
単一レコードの処理を行う場合等は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は、
@{
・・・
var grid = new WebGrid(erc);
・・・
}
・・・
@grid.GetHtml()
・・・
として使用できない。
理由は、
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
この場合、
-[[以下のように、DataTableを、List<dynamic> に変換するか、>#qeaf6181]]
-grid.Column()メソッドで以下のように、formatを明示する、
grid.Column("Name", format: (item) => item.Value["Name"].ToString()),
--なお、ここでHTMLヘルパーを使用するには、以下のように処理する。
---asp.net mvc 3 - how to format html helpers in webgrid column - Stack Overflow~
http://stackoverflow.com/questions/15158183/how-to-format-html-helpers-in-webgrid-column
format: item => Html.TextBox((item) => item.Value["Name"].ToString())
と、イイ感じに処理できるもよう。
***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]
オーバーヘッドがある。
----
Tags: [[:.NET開発]], [[:ASP.NET]], [[:ASP.NET MVC]], [[:ADO.NET]]