今回はADO.NETでのお話です。
みなさんはDBに定義されていないデータを他のカラムから計算したい時はどうしていますか?
普通に思いつくのは、SELECT文で計算することでしょう。
例えば、NorthwindのサンプルDBで考えますと、[Order Details]のテーブルでUnitPriceとQuantityから(Discountは今回は考えません)合計を出したいと考えます。
SELECT文でなら、次のようになるかと思います。
SELECT od.* , od.UnitPrice * od.Quantity AS Total FROM [Order Details] AS od
となると思います。
これを実行し、DataTableに流し込み
DataGridView1.DataSource = dt;
としたとします。
さて、DataGridView1上でUnitPriceやQuantityを変更をした場合どうでしょうか。
Totalの列の値は変わらないですね。
これではユーザにとっては不親切です。
そこで、Expressionです。
これは、DataColumnにあるプロパティです。
このExpressionのプロパティにUnitPrice * Quantityを設定すると・・・
そうです、DataGridView1上でUnitPriceやQuantityを変更すると、Totalの列も変化します。
この違いはどうしてでしょうか。
それは、SELECT文は、DBに問い合わせた時に一度計算されるだけです。
しかし、DataColumn.ExpressionはクライアントPC上で計算されるからです。
どうですか?いい感じではないですか?