Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

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はWebGrid?で使用できない。

理由はこの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から取得する。

オーバーヘッドがある。


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