|
■No73130 (巻 さん) に返信 >> 複数並べなくて良いのでしょうか? > 選択した生徒1人の名簿番号だけを表示したいので、1つで大丈夫です。 であれば IN ではなく、= で良いのでは…。
■No73130 (http:// さん) に返信 > []を付けた方が分かりやすいかなと思い付けたものでしたが、 > 先に記述してあることを書いておかなければなりませんでしたね…。
ふむ。では、SQL などのデータベース処理の部分は一切無視して、 データバインドの部分のみについて書いてみます。
下記のサンプルでは、TextBox を 2 つ用意しており、 どちらにも「名簿番号」が表示されるようになっています。
txt1 は、名簿番号を書き換えるためのもので、 txt2 は、ComboBox の選択項目を変更するためのものです。
Public Class Form1 Private WithEvents cmb As ComboBox Private WithEvents txt1 As TextBox Private WithEvents txt2 As TextBox Private ds As DataSet Private bs As BindingSource Private ep As ErrorProvider Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load txt1 = New TextBox() txt2 = New TextBox() txt1.SetBounds(32, 32, 200, -1) txt2.SetBounds(32, 64, 200, -1) Controls.Add(txt1) Controls.Add(txt2) cmb = New ComboBox() cmb.SetBounds(32, 100, 200, -1) Controls.Add(cmb)
ds = New DataSet() Dim tbl = ds.Tables.Add("生徒名簿") tbl.PrimaryKey = New DataColumn() {tbl.Columns.Add("名簿番号", GetType(Integer))} tbl.Columns.Add("生徒氏名", GetType(String)) tbl.Rows.Add(100, "碇屋長助") tbl.Rows.Add(200, "新井忠") tbl.Rows.Add(300, "紫村健") tbl.Rows.Add(400, "須和真司") tbl.AcceptChanges()
bs = New BindingSource() bs.DataSource = ds bs.DataMember = tbl.TableName
'txt1.ReadOnly = True txt1.DataBindings.Add("Text", bs, "名簿番号", False, DataSourceUpdateMode.OnValidation)
cmb.DataSource = bs cmb.ValueMember = "名簿番号" cmb.DisplayMember = "生徒氏名"
txt2.DataBindings.Add("Text", cmb, "SelectedValue", False, DataSourceUpdateMode.OnValidation)
ep = New ErrorProvider(Me) ep.BindToDataAndErrors(bs, "") End Sub
Private Sub txt1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles txt1.Validating Try bs.EndEdit() bs.Current.Row.ClearErrors() Catch ex As Exception e.Cancel = True bs.Current.Row.SetColumnError("名簿番号", ex.Message) End Try End Sub End Class
txt1 や ep は説明のためのオマケ機能です。今回の案件では不要なはず…。
|