تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة فى حفظ اكتر من صنفين عند حفظ الفاتورة
#1
لسلام عليكم عند مشكلة عندما ادخل اكتر من صنفين فى الداتا جريد فيو واقوم بحفظ الفاتورة فتاتى الرسالة دى 
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 
الرد }}}
تم الشكر بواسطة:
#2
مبدأياً أستبدل هذا السطر :

        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
الرد }}}
تم الشكر بواسطة:
#3
(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
الرد }}}
تم الشكر بواسطة:
#4
ارفق مثال بسيط للمشكلة لحلها .
الرد }}}
تم الشكر بواسطة:
#5
 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 تأكد منها وضع هذا الكود وانشاء الله تنحل المشكلة
ربنا معايا ثانوية عامة " Sad
الرد }}}
تم الشكر بواسطة:
#6
لا لم يتم  الحل اخى الكريم
الرد }}}
تم الشكر بواسطة:
#7
لم تحل هذه المشكلة 


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

- 'طلب اخر اذا كانت نفس الصنف موجود فى الداتا جريد فيو وكتابتة مرة اخرى يتم تجميعة فى سطر واحد
الرد }}}
تم الشكر بواسطة:
#8
السلام عليكم و رحمة الله و بركاته
لو نظرت الى رقم السطر الذي تحصل به المشكلة لعرفت السبب
الحل , اما ان تفحص الصف قبل العملية وفق الكود التالي
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 
بالنسبة لباقي الطلبات هذا يعتمد على طريقة عملك , يفضل وجود مثال مصغر للحل
بالتوفيق
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة:
#9
اشكرك اخى الكريم ابو ليلى على الرد 
بس انا استخدمت الطريقة الثانية واضفت 15 سطر الى الدتا جريد فيو وضغط على حفظ فقام بحفط 8 اسطر فقط وتبقى 7 قمت بالضغط على حفظ فحفظ 4 اسطر ثم 1 وهكذا مش عارف لية
الرد }}}
تم الشكر بواسطة:
#10
مفيش اى حل
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: