モードレス表示で連動画面を作成するには?

解決


いちご  2011-12-01 20:26:55  No: 147404  IP: [192.*.*.*]

お世話になります。

ローカルアプリを作成しています。
一覧画面と詳細画面の親子関係の画面があり、一覧画面にはDataGridviewを
使用してデータを表示しています。この一覧画面からグリッドをクリック
すると詳細画面へ遷移し、行データの詳細内容を表示させたいのですが、
モードレスで詳細画面を表示し、詳細画面のボタンもしくは一覧画面の
行データをクリックすると詳細画面のデータ表示が切り替わる様な一覧と詳細が連動しているような画面処理を行いたいです。
初歩的な質問で申し訳無いのですがよろしくお願い致します。

編集 削除
とくま  2011-12-02 11:19:16  No: 147405  IP: [192.*.*.*]

詳細画面にデータ受け渡し用の関数を作っておいて、
DataGridview のクリックイベントでその関数を
呼んでみてください。

編集 削除
魔界の仮面弁士  2011-12-03 02:34:44  No: 147406  IP: [192.*.*.*]

これでどうでしょう。


Public Class Form1
    Private _ds As DataSet
    Private _subForm As Form2

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        _ds = CreateSampleDataSet()
        Me.BindingSource1.DataSource = _ds
        Me.BindingSource1.DataMember = "営業所"
        Me.BindingSource2.DataSource = Me.BindingSource1
        Me.BindingSource2.DataMember = "営業所従業員"

        Me.DataGridView1.DataSource = Me.BindingSource1
        Me.DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter
    End Sub

    Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
        _subForm = New Form2()
        _subForm.DataGridView1.DataSource = Me.BindingSource2
        _subForm.Show(Me)
    End Sub

    Private Function CreateSampleDataSet() As DataSet
        Dim ds As New DataSet()

        Dim tbl1 As DataTable = ds.Tables.Add("営業所")
        tbl1.Columns.Add("営業所CD", GetType(Integer))
        tbl1.Columns.Add("営業所名", GetType(String))
        tbl1.Rows.Add(1, "東京本店")
        tbl1.Rows.Add(2, "北海道支店")
        tbl1.Rows.Add(3, "大阪営業所")
        tbl1.PrimaryKey = New DataColumn() {tbl1.Columns("営業所CD")}

        Dim tbl2 As DataTable = ds.Tables.Add("従業員")
        tbl2.Columns.Add("従業員CD", GetType(Integer))
        tbl2.Columns.Add("従業員名", GetType(String))
        tbl2.Columns.Add("営業所CD", GetType(Integer))
        tbl2.Rows.Add(1000, "山田", 1)
        tbl2.Rows.Add(1010, "田中", 1)
        tbl2.Rows.Add(1020, "山中", 1)
        tbl2.Rows.Add(2030, "川村", 2)
        tbl2.Rows.Add(2040, "村川", 2)
        tbl2.Rows.Add(2050, "村上", 2)
        tbl2.Rows.Add(2060, "上村", 2)
        tbl2.Rows.Add(2070, "河村", 2)
        tbl2.Rows.Add(3080, "長谷川", 3)
        tbl2.Rows.Add(3090, "五十嵐", 3)
        tbl2.PrimaryKey = New DataColumn() {tbl2.Columns("従業員CD")}

        ds.Relations.Add("営業所従業員", tbl1.Columns("営業所CD"), tbl2.Columns("営業所CD"))
        tbl1.Columns.Add("人数", GetType(Decimal), "COUNT(Child(営業所従業員).従業員CD)")

        ds.AcceptChanges()
        Return ds
    End Function

End Class

編集 削除
いちご  2011-12-05 20:04:48  No: 147407  IP: [192.*.*.*]

とくま様、魔界の仮面弁士様

解答をお寄せ頂きありがとうございました。お寄せ頂いた解答を参考に、
詳細画面側にBindingNavigatorコントロールを使用し、ボタンクリックと、
一覧画面側の行データクリックイベントで、データが切り替わる処理を
行うことが出来ました。本当にありがとうございました。

編集 削除