DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGrid内での計算

環境/言語:[XP]
分類:[.NET]

こんにちわ。いつも参考にさせて頂いています。

初心者的な質問で恐縮なのですが宜しくお願いします。
現在、DataGridのセル内で計算をしようとしています。

数量・単価・金額の列があり、数量と単価に値を入力すると
リアルタイムに金額のセルに「数量*単価 =金額」の結果を表示したいのですが、
どうしたらよいでしょうか?

新しい列を追加するのではなく、既存の列で計算をしたいです。
また、DataColumn.Expressionプロパティの使い方等をご存知の方、
簡単な説明でいいですのでどのようなものなのかご指導をお願いできないでしょうか?お忙しい中申し訳ありません。
よろしくお願いします
patel です。

■No8664に返信(kayoさんの記事)
> 初心者的な質問で恐縮なのですが宜しくお願いします。
> 現在、DataGridのセル内で計算をしようとしています。
>
> 数量・単価・金額の列があり、数量と単価に値を入力すると
> リアルタイムに金額のセルに「数量*単価 =金額」の結果を表示したいのですが、
> どうしたらよいでしょうか?
>
> 新しい列を追加するのではなく、既存の列で計算をしたいです。
> また、DataColumn.Expressionプロパティの使い方等をご存知の方、
> 簡単な説明でいいですのでどのようなものなのかご指導をお願いできないでしょうか?お忙しい中申し訳ありません。

下記にExpressionを使用してのサンプルを記述します。
--------------------------------------------------------

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim DT As New DataTable("DataTable")

Dim dc As DataColumn
dc = New DataColumn("Column1", GetType(Integer))
DT.Columns.Add(dc)

dc = New DataColumn("Column2", GetType(Integer))
DT.Columns.Add(dc)

dc = New DataColumn("Column3", GetType(Integer))
dc.Expression = "Column1 * Column2"
DT.Columns.Add(dc)

DataGrid1.DataSource = DT
End Sub
--------------------------------------------------------
上記の例だと行のデータを確定しないとColumn3へのデータ更新は行われません。
(Column1 または Column2どちらかを修正しても即座には反映されません。
行が確定した時点(Updateされたタイミング)で変更が反映されます。)

即座に変更したいのであれば、下記のサンプルにて。
--------------------------------------------------------

Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim DT As New DataTable("DataTable")

Dim dc As DataColumn
dc = New DataColumn("Column1", GetType(Integer))
DT.Columns.Add(dc)

dc = New DataColumn("Column2", GetType(Integer))
DT.Columns.Add(dc)

dc = New DataColumn("Column3", GetType(Integer))
DT.Columns.Add(dc)

DataGrid1.DataSource = DT

AddHandler DT.ColumnChanged, AddressOf DTChange
End Sub

Private Sub DTChange(ByVal sender As Object, _
ByVal e As DataColumnChangeEventArgs)

Select Case e.Column.Caption
Case "Column1", "Column2"

With e.Row
.Item("Column3") = .Item("Column1") * .Item("Column2")
End With

End Select
End Sub
--------------------------------------------------------

ありがとうございますッ!!!
できましたッ!!!
DataGridTextBoxColumn等を使って自分の理想の形に近づきました。

ありがとうございます。
解決済み!
#別スレで解決に至ったポイントをお話頂いたので参考リンク

>> No8716
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板