Open棟梁Project - マイクロソフト系技術情報 Wiki
ASP.NET MVCでEntity Frameworkをキャンセルした場合の選択肢として
ASP.NET MVC + DataTable?が必要なため、本項にコレを纏めた。
There is nothing about MVC that prevents you from using ADO.NET.
お間違いなきよう。
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?を作成する。
foreach で処理可能。
WebGridのコンストラクタの第一引数の
sourceは、IEnumerableをサポートする必要があるので、
DataTable?使用時は、型の変換が必要がになるもよう。
以下でIEnumerable<DataRow?>に変換可能。
var result = dt.AsEnumerable();
しかし、このresultは、
@{ ・・・ var grid = new WebGrid(erc); ・・・ } ・・・ @grid.GetHtml() ・・・
として使用できない。
理由は、
DataRow?のpublic propertyが、
であるためのもよう。
詳しくは、下記を参照のこと。
この場合、
grid.Column("Name", format: (item) => item.Value["Name"].ToString()),
format: item => Html.TextBox((item) => item.Value["Name"].ToString())
と、イイ感じに処理できるもよう。
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); }
削除しないとメモリを食う。
Hiddenにバイナリ・シリアライズしたDataTable?のBase64エンコーディングを保存。
オーバーヘッドがある。
Tags: :.NET開発, :ASP.NET, :ASP.NET MVC, :ADO.NET