タイトル : Re^11: ListBoxから選択項目... 投稿日 : 2005/09/20(Tue) 11:53 投稿者 : なおこ(・∀・)
お世話になります。 前に自分が貼り付けたソースを、先ほど試してみたら、 少しおかしいと思われるところがあったので、 再度、作り直してみました。 メンバ変数のm_MasterDtは、DBの商品マスタの値を全て持っています。 メンバ変数のm_TestDtは、リストビューの値を管理しているDataTableです。 どのような感じで管理しているのかは、SetSyohinMasterを見てみてください。 ================================================================== Private m_MasterDt As DataTable Private m_TestDt As DataTable Private Sub Form_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load Dim scn As SqlClient.SqlConnection Try scn = New SqlClient.SqlConnection( _ "Data Source = localhost;PersistSecurityInfo=False" _ + ";IntegratedSecurity=SSPI;database=Yuukari") Dim dSet As DataSet = New DataSet("T_商品マスタ") Dim dAdp As SqlClient.SqlDataAdapter scn.Open() dAdp = New SqlClient.SqlDataAdapter( _ "SELECT * FROM T_商品マスタ", scn) dAdp.Fill(dSet, "T_商品マスタ") Me.m_MasterDt = dSet.Tables("T_商品マスタ") ''表示用 Me.m_TestDt = New DataTable With Me.m_TestDt .Columns.Add(New DataColumn("商品コード", GetType(String))) .Columns("商品コード").DefaultValue = "" .Columns.Add(New DataColumn("商品名", GetType(String))) .Columns("商品名").DefaultValue = "" .Columns.Add(New DataColumn("数量", GetType(String))) .Columns("数量").DefaultValue = "" End With Catch ex As Exception MessageBox.Show(ex.Message) Finally If Not IsNothing(scn) Then scn.Close() End Try End Sub Private Sub txt商品_LostFocus(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles txt商品.LostFocus Try If Me.txt商品.Text = "" Then MessageBox.Show("商品コードが入力されていません") Exit Sub End If list商品.Items.Clear() Me.SetSyohinMaster(Me.txt商品.Text, False) For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1 list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _ + StrDup(21, " ") _ + CType(Me.m_TestDt.Rows(i)("数量"), String)) Next With Me.DataGrid1 .DataSource = Me.m_TestDt .RowHeadersVisible = False .ColumnHeadersVisible = False End With Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub txt数量_LostFocus(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles txt数量.LostFocus Try If Me.txt商品.Text = "" Then MessageBox.Show("商品コードが入力されていません") Exit Sub End If If Me.txt数量.Text = "" Then MessageBox.Show("数量が入力されていません") Exit Sub End If list商品.Items.Clear() Me.SetSyohinMaster(Me.txt商品.Text, True) For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1 list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _ + StrDup(21, " ") _ + CType(Me.m_TestDt.Rows(i)("数量"), String)) Next Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub SetSyohinMaster(ByVal syohin As String, _ ByVal suryo As Boolean) Try If Not suryo Then 'DB(m_MasterDt)に商品コードが存在するかどうかのチェック Dim rows() As DataRow = Me.m_MasterDt.Select("商品コード=" + syohin) Dim shohinname As String If rows.Length = 1 Then '商品マスタに存在したら、商品名を取得する。 shohinname = CType(rows(0)("商品名"), String) If Me.m_TestDt.Select("商品コード=" + syohin).Length < 1 Then '該当する商品コードがm_TestDtに存在しなければ、Rowを追加する。 Me.m_TestDt.Rows.Add(New Object() {syohin, shohinname, ""}) End If Else Throw New Exception("商品コードが存在しません") End If Else Dim rows() As DataRow = Me.m_TestDt.Select("商品コード=" + syohin) If rows.Length = 1 Then rows(0).BeginEdit() rows(0)("数量") = Me.txt数量.Text rows(0).EndEdit() End If End If Catch ex As Exception Throw ex End Try End Sub |