マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

ASP.NET MVCEntity Frameworkをキャンセルした場合の選択肢として
ASP.NET MVC + DataTable?が必要なため、本項にコレを纏めた。

通常の処理

通常通りViewに持って行って処理可能。

お間違いなきよう。

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系の処理

foreach

foreach で処理可能。

WebGrid

WebGridのコンストラクタの第一引数の
sourceは、IEnumerableをサポートする必要があるので、
DataTable?使用時は、型の変換が必要がになるもよう。

IEnumerable<DataRow?> ではダメなケースがある。

以下でIEnumerable<DataRow?>に変換可能。

var result = dt.AsEnumerable();

しかし、このresultは、

@{
  ・・・
  var grid = new WebGrid(erc);
  ・・・
}
・・・
@grid.GetHtml()
・・・

として使用できない。

理由は、

DataRow?のpublic propertyが、

であるためのもよう。

詳しくは、下記を参照のこと。

この場合、

と、イイ感じに処理できるもよう。

List<dynamic> に変換する。

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);
}

ポストバック的な動作がある場合

Sessionに格納しておく。

削除しないとメモリを食う。

Hidennに格納しておく。

Hiddenにバイナリ・シリアライズしたDataTable?のBase64エンコーディングを保存。

都度、DBから取得する。

オーバーヘッドがある。

参考

Stack Overflow

AutoMapper


Tags: :.NET開発, :ASP.NET, :ASP.NET MVC, :ADO.NET


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS