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

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

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

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