منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة (/showthread.php?tid=24650)

الصفحات: 1 2 3


مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - atef_020 - 25-04-18

لسلام عليكم عند مشكلة عندما ادخل اكتر من صنفين فى الداتا جريد فيو واقوم بحفظ الفاتورة فتاتى الرسالة دى 
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

[img=973x800] [/img]
PHP كود :
   Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button2.Click

        If con
.State ConnectionState.Open Then con.Close()
 
       Dim strInsert As String " Insert into tb1([Date],[SelMan],[total])values(@Date,@SelMan,@total)"

 
       cmd = New OleDb.OleDbCommand(strInsertcon)
 
       cmd.Parameters.Add(New OleDb.OleDbParameter("@Date"OleDb.OleDbType.VarChar)).Value TextBox1.Text
        cmd
.Parameters.Add(New OleDb.OleDbParameter("@SelMan"OleDb.OleDbType.VarChar)).Value SelMan.Text
        cmd
.Parameters.Add(New OleDb.OleDbParameter("@total"OleDb.OleDbType.VarChar)).Value SelMdataTextBox.Text

        con
.Open()

 
       cmd.ExecuteNonQuery()
 
       cmd = New OleDb.OleDbCommand("select max(id) from tb1"con)
 
       Dim dr As OleDb.OleDbDataReader cmd.ExecuteReader
        dr
.Read()
 
       'اضافة تفاصيل الفاتورة
        Dim ID_tb1 As Integer = dr(0)
        dr.Close()
        Dim code, quant As Integer

        Dim price, total As Double

        strInsert = "Insert into sell(code,ID_tb1,Name,quant,price,total)values(@code,@ID_tb1,@Name,@quant,@price,@total)"
        cmd = New OleDb.OleDbCommand(strInsert, con)

        For i As Integer = 0 To SellDataGridView.RowCount - 2
            code = SellDataGridView.Rows(i).Cells(0).Value
            Name = SellDataGridView.Rows(i).Cells(1).Value
            quant = SellDataGridView.Rows(i).Cells(2).Value
            price = SellDataGridView.Rows(i).Cells(3).Value
            total = SellDataGridView.Rows(i).Cells(4).Value
            cmd = New OleDbCommand(strInsert, con)
            cmd.Parameters.Add(New OleDb.OleDbParameter("@code", OleDb.OleDbType.Integer)).Value = code
            cmd.Parameters.Add(New OleDb.OleDbParameter("@ID_tb1", OleDb.OleDbType.Integer)).Value = ID_tb1
            cmd.Parameters.Add(New OleDb.OleDbParameter("@Name", OleDb.OleDbType.VarChar)).Value = Name
            cmd.Parameters.Add(New OleDb.OleDbParameter("@quant", OleDb.OleDbType.Integer)).Value = quant
            cmd.Parameters.Add(New OleDb.OleDbParameter("@price", OleDb.OleDbType.Currency)).Value = price
            cmd.Parameters.Add(New OleDb.OleDbParameter("@total", OleDb.OleDbType.Currency)).Value = total
            cmd.ExecuteNonQuery()
            SellDataGridView.Rows.RemoveAt(SellDataGridView.CurrentRow.Index)

        Next
        add_number()
        con.Close()
       
    End Sub 



RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - حريف برمجة - 25-04-18

مبدأياً أستبدل هذا السطر :

        For i As Integer = 0 To SellDataGridView.RowCount - 2

بهذا السطر :

 For i As Integer = 0 To SellDataGridView.RowCount - 3

أو هذا :

        For i As Integer = 1 To SellDataGridView.RowCount - 1


RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - atef_020 - 25-04-18

(25-04-18, 01:50 PM)حريف برمجة كتب : مبدأياً أستبدل هذا السطر :

        For i As Integer = 0 To SellDataGridView.RowCount - 2

بهذا السطر :

 For i As Integer = 0 To SellDataGridView.RowCount - 3

أو هذا :

        For i As Integer = 1 To SellDataGridView.RowCount - 1

نفس المشكلة اخى الكريم
وبيحدد المشكلة فى السطر دة 
  code = SellDataGridView.Rows(i).Cells(0).Value


RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - حريف برمجة - 25-04-18

ارفق مثال بسيط للمشكلة لحلها .


RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - elmezo - 25-04-18

 Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button2.Click

        
If con.State ConnectionState.Open Then con.Close()
        Dim strInsert As String " Insert into tb1([Date],[SelMan],[total])values(@Date,@SelMan,@total)"

 
       cmd = New OleDb.OleDbCommand(strInsertcon)
 
       cmd.Parameters.Add(New OleDb.OleDbParameter("@Date"OleDb.OleDbType.VarChar)).Value TextBox1.Text
        cmd
.Parameters.Add(New OleDb.OleDbParameter("@SelMan"OleDb.OleDbType.VarChar)).Value SelMan.Text
        cmd
.Parameters.Add(New OleDb.OleDbParameter("@total"OleDb.OleDbType.VarChar)).Value SelMdataTextBox.Text

        con
.Open()

 
       cmd.ExecuteNonQuery()
 
       cmd = New OleDb.OleDbCommand("select max(id) from tb1"con)
 
       Dim dr As OleDb.OleDbDataReader cmd.ExecuteReader
        dr
.Read()
 
       'اضافة تفاصيل الفاتورة
        Dim ID_tb1 As Integer = dr(0)
        dr.Close()
        Dim code, quant As Integer

        Dim price, total As Double

        strInsert = "Insert into sell(code,ID_tb1,Name,quant,price,total)values(@code,@ID_tb1,@Name,@quant,@price,@total)"
        cmd = New OleDb.OleDbCommand(strInsert, con)

        For i As Integer = 0 To SellDataGridView.RowCount - 1
            code = SellDataGridView.Rows(i).Cells(0).Value
            Name = SellDataGridView.Rows(i).Cells(1).Value
            quant = SellDataGridView.Rows(i).Cells(2).Value
            price = SellDataGridView.Rows(i).Cells(3).Value
            total = SellDataGridView.Rows(i).Cells(4).Value
            cmd = New OleDbCommand(strInsert, con)
            cmd.Parameters.Add(New OleDb.OleDbParameter("@code", OleDb.OleDbType.Integer)).Value = code
            cmd.Parameters.Add(New OleDb.OleDbParameter("@ID_tb1", OleDb.OleDbType.Integer)).Value = ID_tb1
            cmd.Parameters.Add(New OleDb.OleDbParameter("@Name", OleDb.OleDbType.VarChar)).Value = Name
            cmd.Parameters.Add(New OleDb.OleDbParameter("@quant", OleDb.OleDbType.Integer)).Value = quant
            cmd.Parameters.Add(New OleDb.OleDbParameter("@price", OleDb.OleDbType.Currency)).Value = price
            cmd.Parameters.Add(New OleDb.OleDbParameter("@total", OleDb.OleDbType.Currency)).Value = total
            cmd.ExecuteNonQuery()
            SellDataGridView.Rows.RemoveAt(SellDataGridView.CurrentRow.Index)

        Next
        add_number()
        con.Close()
       
    End Sub 




جرب هذا وتأكد من ان الاسماء صحيحة اى ان القيمة الصحيحة للID هى 0
code = SellDataGridView.Rows(i).Cells(0).Value
فيمكن ان يكون 1 وليس 0 تأكد منها وضع هذا الكود وانشاء الله تنحل المشكلة


RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - atef_020 - 25-04-18

لا لم يتم  الحل اخى الكريم


RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - atef_020 - 25-04-18

لم تحل هذه المشكلة 


وممكن طلب فى انى اذا كانت كمية الصنف اكثر من واحد فانى اضغط f4 مثلا قبل كتابو كود الصنف ليذهب بعد كتابة الكود الى cell (3 الى خانة الكمية فى داتا جريد فيو لتعديل الكمية 

- 'طلب اخر اذا كانت نفس الصنف موجود فى الداتا جريد فيو وكتابتة مرة اخرى يتم تجميعة فى سطر واحد


RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - ابو ليلى - 25-04-18

السلام عليكم و رحمة الله و بركاته
لو نظرت الى رقم السطر الذي تحصل به المشكلة لعرفت السبب
الحل , اما ان تفحص الصف قبل العملية وفق الكود التالي
PHP كود :
For i As Integer = 0 To SellDataGridView.RowCount 1
        If Not SellDataGridView
.Rows(i).IsNewRow Then
'اكتب اكوادك هنا
        End If 
او ان تتبع هذه الطريقة و هي الافضل
PHP كود :
       For Each Dgrow As DataGridViewRow In SellDataGridView.Rows
            If Not Dgrow
.IsNewRow Then
                Dim Row 
As DataRowView DirectCast(Me.SellDataGridView.CurrentRow.DataBoundItemDataRowView)
 
               If Row IsNot Nothing Then
                    code 
Row.Item("اسم العمود").ToString()
 
                   'اكمل باقي الكود بنفس الطريقة
                End If
            End If
        Next 
بالنسبة لباقي الطلبات هذا يعتمد على طريقة عملك , يفضل وجود مثال مصغر للحل
بالتوفيق


RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - atef_020 - 26-04-18

اشكرك اخى الكريم ابو ليلى على الرد 
بس انا استخدمت الطريقة الثانية واضفت 15 سطر الى الدتا جريد فيو وضغط على حفظ فقام بحفط 8 اسطر فقط وتبقى 7 قمت بالضغط على حفظ فحفظ 4 اسطر ثم 1 وهكذا مش عارف لية


RE: مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة - atef_020 - 27-04-18

مفيش اى حل