tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。