2008/02/15(Fri) 10:05:49 編集(投稿者)
■No14326 (しほちゃん★ さん) に返信
> datagridで明細を作っております。
DataGridView ではなく、DataGrid の方なのですね?
それは、System.Windows.Forms 名前空間の DataGrid を指しているのでしょうか。
それとも、System.Web.UI.WebControls 名前空間の DataGrid でしょうか。
> 調べた結果、EditingControlShowingが適正だとおもいます。
あれ? という事は、実は System.Windows.Forms.DataGridView なのでしょうか。
……DataGrid ではなく、DataGridView だと仮定して回答します。
> datagrid(colmun,row).value ⇒7列の値が変わったら7列の値をすべて合計したいのですが
丸括弧表記という事は、C# ではなく、VB なのかな…。
とりあえず、VB2005 と仮定しておきます。
> EditingControlShowingはセル内の
> 値が変わったら走るイベントですか?
DataGridView で入力を開始すると、TextBox や ListBox(ComboBox) のような状態になりますよね。
そうした「入力用のコントロール」が表示される際に発生するイベントです。
EditingControlShowing では、e.Control にて、その入力用コントロールを受け取れますので、
あとは、その TextBox のイベント(TextChanged や KeyPress や Leave など)や
プロパティ(Text や BackColor など)を利用する…という流れになります。
> 7列●行の値が変わったときのイベントがわかりません。
DataSet 側のイベントとして受け取りたいのでしょうか。
それとも、DataGridView 側のイベントとして受け取りたいのでしょうか。
DataSet 側で行うなら、リレーションを貼れば、「合計値を自動計算させる列」を
DataTable の列として用意する事もできますね。
Public Class Form1
Private WithEvents dgv1 As New DataGridView()
Private ds As DataSet
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
ds = CreateSampleDataSet()
dgv1.DataSource = ds.Tables("Main")
dgv1.AutoResizeColumns()
dgv1.Dock = DockStyle.Fill
Controls.Add(dgv1)
End Sub
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Shown
dgv1.AutoResizeColumns()
End Sub
Private Shared Function CreateSampleDataSet() As DataSet
Dim ds As New DataSet()
Dim tblMain As DataTable = ds.Tables.Add("Main")
tblMain.PrimaryKey = New DataColumn() { _
tblMain.Columns.Add("売上ID", GetType(Integer)), _
tblMain.Columns.Add("明細ID", GetType(Integer))}
tblMain.Columns.Add("商品CD", GetType(String))
tblMain.Columns.Add("金額", GetType(Decimal))
tblMain.Rows.Add(1, 1, "AAAA", 1500D)
tblMain.Rows.Add(1, 2, "BBBB", 500D)
tblMain.Rows.Add(1, 3, "CCCC", 200D)
tblMain.Rows.Add(1, 4, "DDDD", 800D)
tblMain.Rows.Add(2, 1, "AAAA", 1001D)
tblMain.Rows.Add(2, 2, "BBBB", 2020D)
tblMain.Rows.Add(2, 3, "CCCC", 3300D)
Dim tblSummary As DataTable = ds.Tables.Add("Summary")
tblSummary.PrimaryKey = New DataColumn() { _
tblSummary.Columns.Add("売上ID", GetType(Integer))}
tblSummary.Columns.Add("売上日", GetType(Date))
tblSummary.Rows.Add(1, #12/24/2007#)
tblSummary.Rows.Add(2, #12/25/2007#)
ds.Relations.Add( _
"relSummary_Main", _
tblSummary.Columns("売上ID"), _
tblMain.Columns("売上ID"))
tblSummary.Columns.Add("総額", GetType(Decimal), "SUM(Child.金額)")
tblMain.Columns.Add("総額", GetType(Decimal), "Parent.総額")
Return ds
End Function
End Class