2017-12-02 53 views
1

DataGridViewに問題があります。下記の画像を参照してください。Vb.net DataGridViewを繰り返す

画像1は、自分の製品の1つで「カートに入れる」をクリックしたことを示しています。DataGridViewはその製品を示しています。

Image 1

問題は、私は他の製品を追加したい場合は、DataGridViewの中の製品のリストではなく、他の異なる製品を追加することで自分自身を繰り返しています。 画像2は、新製品の「カートに入れる」をクリックしたときの状況を示しています。

Image 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 
+0

コードはグリッド内のすべての行をループします。ループを外して、新しいグリッド行を操作することを検討してください。 もっと一般的には、オブジェクトのリストにグリッドをバインドして作業することをお勧めします。データバインディングはプレゼンテーションレイヤを処理するために残ります。 – peterG

+0

コードを単純にトレースすると、問題が明らかになります。最初の行にブレークポイントを置き、コードが行うことをトレースします。変数 'product'、' price'、 'quantity'および' subtotal'は決して使用されません。コードの2番目の部分は、単にテキストボックスにあるSAMEの値を使用し、それらをグリッドに追加します。このため、各行に同じ値が得られます。コードをトレースするだけでこれを明らかにする必要があります。 – JohnG

+0

ピーターが...グリッドをループする必要はありません。単純に、テキストボックスの項目を含む新しい行を追加します。 (グリッドではなく)TEXTBOXESから変数 'product'、' price'、 'quantity'などを使用し、グリッドに新しい行を追加するだけです:' grd_cart.Rows.Add(product、price、quantity、subtotal) ' 。 – JohnG

答えて

0

あなたは、グリッドをcicleする必要はありません。
(もちろん、これは小計の計算方法によって異なる場合があります)

現在の値を使用してグリッドに新しい行を追加するだけで済みます。

これはその方法です。

'Check whether the Price value is a number or not (to be safe) 
'If can't be used as a number, return 
Dim _Price As Long 
If Long.TryParse(txt_price.Text, _Price) = False Then Return 

'Calculate the subtotal value based on quantity and unit price 
'I know not everyone calculates the sub total this way. In case, just add a comment. 
Dim _subtotal As Long = CLng(num_quantity.Value) * _Price 

'Add the new Row values 
grd_cart.Rows.Add(New String() {txt_product_id.Text, 
           _Price.ToString, 
           num_quantity.Value.ToString, 
           _subtotal.ToString}) 

これが結果です:

enter image description here

あなたはまた、通貨形式で値を提示する可能性があります

'The output can also be formatted using the local Currency format 
grd_cart.Rows.Add(New String() {txt_product_id.Text, 
           _Price.ToString("C"), 
           num_quantity.Value.ToString, 
           _subtotal.ToString("C")}) 

は、これが結果です:

enter image description here

関連する問題