1
private void SaveButton_Click(object sender, EventArgs e)
    {
        try
        {
            if (CashPaymentGridView.Rows.Count > 1)
            {
                CashPaymentandReceivedE cashpament =new CashPaymentandReceivedE();
                List<CashPaymentandReceivedE> cashpaymentList = new List<CashPaymentandReceivedE>();
                foreach ( DataGridViewRow rows in CashPaymentGridView.Rows)
                {
                    if (rows.IsNewRow )
                    {
                        break ;
                    }
                    cashpament.VR_NO= Convert.ToInt16(VoucherNoTextBox.Text);
                    cashpament.VR_DATE  = VrDate.Value ;
                    cashpament.ETYPE = "CPV";
                    cashpament.USER_ID = "1";
                    cashpament.PARTY_ID= Convert.ToString (rows.Cells[2].Value)  ;
                    cashpament.DESCRIPTION  = Convert.ToString ( rows.Cells[3].Value);
                    cashpament.INVOICE = Convert.ToString(rows.Cells[4].Value);
                    cashpament.DEBIT  = Convert.ToInt32(rows.Cells[5].Value);
                    cashpament.CREDIT = 0;
                    cashpaymentList.Add(cashpament);

                    cashpament = new CashPaymentandReceivedE();
                    cashpament.VR_NO =Convert.ToInt16(VoucherNoTextBox.Text);
                    cashpament.VR_DATE = VrDate.Value;
                    cashpament.ETYPE = "CPV";
                    cashpament.USER_ID = "1";
                    cashpament.PARTY_ID = NewAccountsDAL.Get_Id_Name ("CASH");
                    cashpament.DESCRIPTION = Convert.ToString(rows.Cells[3].Value);
                    cashpament.INVOICE = Convert.ToString(rows.Cells[4].Value);
                    cashpament.CREDIT = Convert.ToInt32(rows.Cells[5].Value);
                    cashpament.DEBIT = 0;
                    cashpaymentList.Add(cashpament);
                }
                if (CashPaymentandReceivedDAL.Save(cashpaymentList))
                {
                    MessageBox.Show("SAVE SUCCESSFULLY...............");
                    ResetForm();
                }
            }
            else
            {
                MessageBox.Show ("Please select atleast one record.....");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message );
        }
    }

データを保存するためのストアド プロシージャは次のように与えられます。

public static bool Save(List  <CashPaymentandReceivedE> cashreceivedpayment)
    {
        bool blnResult = false;
        SqlConnection objSqlConnection = new SqlConnection(ConnectionString.Connection);
        //SqlTransaction objSqlTransaction = null;
        try
        {
            objSqlConnection.Open();
            //objSqlTransaction = objSqlConnection.BeginTransaction();
            int R = 0;
            while (R < cashreceivedpayment.Count )
            {

                SqlCommand objSqlCommand = new SqlCommand("CASHRECEIVED_Save", objSqlConnection);
                objSqlCommand.CommandType = CommandType.StoredProcedure;

                //SqlParameter objIdentityParameter = objSqlCommand.Parameters.Add("@PLED_ID", SqlDbType.BigInt);
                //objIdentityParameter.Direction = ParameterDirection.Output;

                //objSqlCommand.Parameters.AddWithValue("@PLED_ID", cashreceivedpayment[R].PLED_ID);
                objSqlCommand.Parameters.AddWithValue("@COMPANY_ID", "1");
                objSqlCommand.Parameters.AddWithValue("@PARTY_ID", cashreceivedpayment[R].PARTY_ID);
                objSqlCommand.Parameters.AddWithValue("@VR_NO", cashreceivedpayment[R].VR_NO);
                objSqlCommand.Parameters.AddWithValue("@ETYPE", cashreceivedpayment[R].ETYPE);
                objSqlCommand.Parameters.AddWithValue("@VR_DATE", cashreceivedpayment[R].VR_DATE);
                objSqlCommand.Parameters.AddWithValue("@DESCRIPTION", cashreceivedpayment[R].DESCRIPTION);
                objSqlCommand.Parameters.AddWithValue("@DEBIT", cashreceivedpayment[R].DEBIT);
                objSqlCommand.Parameters.AddWithValue("@CREDIT", cashreceivedpayment[R].CREDIT);
                objSqlCommand.Parameters.AddWithValue("@USER_ID", cashreceivedpayment[R].USER_ID);
                //objSqlCommand.Parameters.AddWithValue("@COMPNAY_ID", cashreceivedpayment[R].COMPANY_ID);
                objSqlCommand.Parameters.AddWithValue("@DESCRIPTION2", "DESCRIPTION2");
                objSqlCommand.Parameters.AddWithValue("@INVOICE", cashreceivedpayment[R].INVOICE);
                objSqlCommand.ExecuteNonQuery();
                R++;
                blnResult = true;
            }

        }
        catch (Exception ex)
        {
            //objSqlTransaction.Rollback();
            MessageBox.Show(ex.Message);
        }
        finally
        {
            //objSqlTransaction.Commit();
            objSqlConnection.Close();

        }
        return blnResult;
    }

レコードを保存すると、1 つのレコードは Party_id で、もう 1 つのレコードは現金である必要があります。しかし、複数のレコードを選択すると、1 つのエントリだけがキャッシュに保存されます。レコードをロードすると、1つのレコードがロードされます.plz help if u understand.....

4

1 に答える 1

0

1 つの オブジェクトを作成CashPaymentandReceivedEし、リストの反復ごとにそのオブジェクトへの参照を追加します。次に、反復ごとにその単一オブジェクトのすべてのデータも変更します。この行を移動するだけです:

CashPaymentandReceivedE cashpament =new CashPaymentandReceivedE();

...ステートメントで問題を解決する必要があります。foreach

ただし、そうする前に、コードがこのように動作する理由を理解していることを確認してください。リストにはオブジェクトが含まれているのではなく、オブジェクトへの参照が含まれていることを理解することは非常に重要です。あなたの場合、修正するまで、単一のオブジェクトへの複数の参照が含まれます。

foreachまた、メソッドで a を使用することを強くお勧めします。Saveまたは、何らかの理由でインデックスが本当にfor必要な場合は、 aの代わりにループを使用してくださいwhile

于 2012-12-13T07:48:57.790 に答える