今回は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上で計算されるからです。


どうですか?いい感じではないですか?