タイトル : Re^9: ListBoxから選択項目... 投稿日 : 2005/09/17(Sat) 18:41 投稿者 : なおこ(・∀・)
お世話になります。 > 削除の方は今の所問題はないのですが、上記のようにやると2品目の商品を表示しようとすると1品 目 > の商品が消えてしまい。今度は1つの商品しか表示できなくなってしまいます。 > > @txt商品→コード入力 > <結果> > 商品1 > Atxt数量→数量入力 > <結果> > 商品1 数量 > > ここまではいいのですが、次が問題なのです。 > @・Aを繰り返そうとすると商品1が消えてしまい新しい商品が表示されてしまう。 > 2回目以降の商品は追加する感じで表示させたいのです。 ちょっと上の状況があまり把握できないのですが、 こんな感じでしょうか。 ちなみに、今はVisualStudioが手元にないので、動作確認してません。あしからず。 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_M_商品マスタ Where 商品コード = "+ syohin , scn ) dAdp.Fill(dSet, "T_商品マスタ") Me.m_MasterDt = dSet.Tables("T_商品マスタ") '内部用のDataTableを作成 Me.m_TestDt = New DataTable() Me.m_TestDt = Me.m_MasterDt.Clone() Me.m_TestDt.Columns.Add( New DataColumn( "表示", GetType(Integer)) Me.m_TestDt.Columns.Add( New DataColumn( "数量表示", GetType(Integer)) Me.m_TestDt.Columns("表示").Defaultvalue = 0 Me.m_TestDt.Columns("数量表示").Defaultvalue = 0 For Each row As DataRow In Me.m_MasterDt.Rows Dim newrow As DataRow = Me.m_TestDt.NewRow() For i As Integer = 0 to Me.m_MasterDt.Columns.Count -1 newrow(i) = row(i) Next Me.m_TestDt.Rows.Add(newrow) Next Catch ex As Exception Trace.WriteLine( 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 Dim dt As DataTable = Me.GetSyohinMaster( Me.txt商品.Text , False ) For i As Integer = 0 To dt.Rows.Count -1 list商品.Items.Add(CType(dt.Rows(i)("商品名"), String)) Next With Me.DataGrid1 .DataSource = dt .RowHeadersVisible = False .ColumnHeadersVisible = False End With Catch ex As Exception Trace.WriteLine( 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 Dim dt As DataTable = Me.GetSyohinMaster( Me.txt商品.Text , True ) For i As Integer = 0 To dt.Rows.Count -1 list商品.Items.Add(CType(dt.Rows(i)("商品名"), String) _ + StrDup(21, " ") _ + txt数量.Text) Next Catch ex As Exception Trace.WriteLine( ex.Message ) End Try End Sub Private Function GetSyohinMaster( ByVal syohin As String, ByVal checkSuryo As Boolean ) As DataTable Try Dim filterRows As DataRow() Dim dt As DataTable = Me.m_MasterDt.Clone() If Not checkSuryo Then 'txt商品_LostFocusで呼ばれた時(商品コード=引数 かつ list表示されていないレコード を取得) filterRows = Me.m_MasterDt.Select(" 商品コード=" + syohin + " AND 表示 = 0") Else 'txt数量_LostFocusで呼ばれた時(商品コード=引数 かつ数量が設定されていないレコード を取得) filterRows = Me.m_MasterDt.Select(" 商品コード=" + syohin + " AND 数量表示 = 0") End If For Each row As DataRow In filterRows Dim newrow As DataRow = dt.NewRow() For i As Integer = 0 to dt.Columns.Count -1 newrow(i) = row(i) Next dt.Rows.Add(newrow) row.BeginEdit() If Not checkSuryo Then row("表示") = 1 Else row("数量表示") = 1 End If row.EndEdit() Next Return dt Catch ex As Exception Trace.WriteLine( ex.Message ) End Try End Function |