1
DataGridViewに問題があります。下記の画像を参照してください。Vb.net DataGridViewを繰り返す
画像1は、自分の製品の1つで「カートに入れる」をクリックしたことを示しています。DataGridViewはその製品を示しています。
問題は、私は他の製品を追加したい場合は、DataGridViewの中の製品のリストではなく、他の異なる製品を追加することで自分自身を繰り返しています。 画像2は、新製品の「カートに入れる」をクリックしたときの状況を示しています。
Private Sub btn_add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_add.Click
grd_cart.RowCount = grd_cart.RowCount + 1
For i As Integer = 0 To grd_cart.RowCount - 1
Dim product As String = grd_cart(0, i).Value
Dim price As String = grd_cart(1, i).Value
Dim quantity As String = grd_cart(2, i).Value
Dim subtotal As String = grd_cart(3, i).Value
grd_cart(0, i).Value = txt_product_id.Text
grd_cart(1, i).Value = txt_price.Text
grd_cart(2, i).Value = num_quantity.Value
grd_cart(3, i).Value = grd_cart(1, 0).Value * grd_cart(2, 0).Value
Next
End Sub
コードはグリッド内のすべての行をループします。ループを外して、新しいグリッド行を操作することを検討してください。 もっと一般的には、オブジェクトのリストにグリッドをバインドして作業することをお勧めします。データバインディングはプレゼンテーションレイヤを処理するために残ります。 – peterG
コードを単純にトレースすると、問題が明らかになります。最初の行にブレークポイントを置き、コードが行うことをトレースします。変数 'product'、' price'、 'quantity'および' subtotal'は決して使用されません。コードの2番目の部分は、単にテキストボックスにあるSAMEの値を使用し、それらをグリッドに追加します。このため、各行に同じ値が得られます。コードをトレースするだけでこれを明らかにする必要があります。 – JohnG
ピーターが...グリッドをループする必要はありません。単純に、テキストボックスの項目を含む新しい行を追加します。 (グリッドではなく)TEXTBOXESから変数 'product'、' price'、 'quantity'などを使用し、グリッドに新しい行を追加するだけです:' grd_cart.Rows.Add(product、price、quantity、subtotal) ' 。 – JohnG