31-07-22, 11:26 PM (آخر تعديل لهذه المشاركة : 01-08-22, 09:25 PM {2} بواسطة technomedia.)
السلام عليكم و رحمة الله
ان شاء الله أموركم جيدة و في صحة و عافية
لدي فقط مشكلة بسيطة في شاشة المبيعات فعند ادخال نفس العنصر عوض أن يضيف فقط الكمية ، إذا به يضيف العنصر نفسه مرة أخرى
هذا هو كود في حدث Keydown ل تاكست بوكس " الكمية "
------------------------------------------
كود :
Private Sub qte_vente_KeyDown(sender As Object, e As KeyEventArgs) Handles qte_vente.KeyDown
For i As Integer = 0 To DGVBill.Rows.Count - 1
If qte_vente.Text = "" Then
Return
ElseIf DGVBill.Rows(i).Cells(1).Value = codebare_vente.Text Then
DGVBill.Rows(i).Cells(5).Value = Val(DGVBill.Rows(i).Cells(5).Value + Val(qte_vente.Text))
Exit Sub
End If
Next
مع العلم 'cells(5) هي خلية الكمية في DGV'
أود معرفة أين الخطأ في الكود و كيف أضيف الكمية +1 فقط عوض اضافة نفس العنصر
المفروض بعد تعديل الكمية أن تعطي أمر انهاء الحلقة أو الاجراء كي لا يضيفه مرة أخرى
كأن :
- تضيف بعد كود الاضافة كود(Exit For) لانهاء الحلقة في حال هي من تظيف السطر الجديد
- أو تضيف (Exit Sub) لانهاء كامل الاجراء إذا كانت الاضافة بعد الحلقة.
فيصبح الكود هو :
كود :
Private Sub qte_vente_KeyDown(sender As Object, e As KeyEventArgs) Handles qte_vente.KeyDown
For i As Integer = 0 To DGVBill.Rows.Count - 1
If qte_vente.Text = "" Then
Return
ElseIf DGVBill.Rows(i).Cells(1).Value = codebare_vente.Text Then
DGVBill.Rows(i).Cells(5).Value = Val(DGVBill.Rows(i).Cells(5).Value + Val(qte_vente.Text))
Exit Sub
End If
Next
01-08-22, 12:43 AM (آخر تعديل لهذه المشاركة : 01-08-22, 12:53 AM {2} بواسطة technomedia.)
(01-08-22, 12:26 AM)Taha Okla كتب :
الغرض من الكود هو عند إضافة عنصر موجود مسبقا في الداتا غريد فياو يقوم الكود بإضافة الكمية أيا كانت التي هي موجودة في التاكست بوكس " الكمية" وليس اضافة العنصر مرة أخرى كما حدث معي هنا في الصورة ، نفس المشكلة لا زالت مستمرة
للتنويه: هذا الكود للإضافة في DT
قال الله تعالى:" وقلت استغفروا ربكم إنه كان غفارا يرسل السماء عليكم مدرارا و يمددكم بأموال وبنين ويجعل لكم جنات ويجعل لكم أنهار"
"أستغفر الله العظيم و أتوب إليه عدد ما كان و عدد مايكون و عدد الحركات و السكون"
بدون قواعد بيانات فقط ان الكود الخاص بك يعمل بشكل جيد
التالي كل كلاس الفورم لمن لا يريد تحميل المرفق
PHP كود :
Public Class Form1 Private Function gid() Return dgv.Rows.Count End Function Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill Randomize() End Sub Private Sub btnGen_Click(sender As System.Object, e As System.EventArgs) Handles btnGen.Click txtbarcode.Text = Int(Rnd() * 999) End Sub Private Sub txtq_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtq.KeyDown If e.KeyData = Keys.Enter Then If dgv.Rows.Count = IIf(dgv.AllowUserToAddRows, 1, 0) Then dgv.Rows.Add(gid, txtbarcode.Text, txtname.Text, txtu.Text, txtunitpr.Text, txtq.Text) Else For i As Integer = 0 To dgv.Rows.Count - IIf(dgv.AllowUserToAddRows, 2, 1) If txtq.Text = "" Then Return Else If dgv.Rows(i).Cells(1).Value = txtbarcode.Text Then dgv.Rows(i).Cells(5).Value = Val(dgv.Rows(i).Cells(5).Value + Val(txtq.Text)) Else Dim row As New DataGridViewRow row.CreateCells(dgv) row.Cells(0).Value = gid() row.Cells(1).Value = txtbarcode.Text row.Cells(2).Value = txtname.Text row.Cells(3).Value = txtu.Text row.Cells(4).Value = txtunitpr.Text row.Cells(5).Value += Val(txtq.Text) dgv.Rows.Add(row) End If
End If Next End If End If End Sub Private Sub dgv_RowsAdded(sender As Object, e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles dgv.RowsAdded dgv.Rows(e.RowIndex).Cells(6).Value = Val(dgv.Rows(e.RowIndex).Cells(4).Value) * Val(dgv.Rows(e.RowIndex).Cells(5).Value) End Sub End Class
01-08-22, 01:20 AM (آخر تعديل لهذه المشاركة : 01-08-22, 02:01 AM {2} بواسطة technomedia.)
(01-08-22, 01:00 AM)Taha Okla كتب : اكتب الكود كامل
أو قم بارفاق المشروع للتعديل عليه
سأرفق الكود بعد التعديل ، شكرا جزيلا لك، وكل من حاول المساعدة ليستفيد الجميع ، علما أني ابتعدت كثيرا عن البرمجة مايفوق 3 سنوات لذلك تراني نسيت حتى البديهيات.
لكن بعد إذنك هل ممكن الكود دون خاصية Allow user to add Rows فأنا معطل لهذه الخاصية في الداتاغريد فياو؟
قال الله تعالى:" وقلت استغفروا ربكم إنه كان غفارا يرسل السماء عليكم مدرارا و يمددكم بأموال وبنين ويجعل لكم جنات ويجعل لكم أنهار"
"أستغفر الله العظيم و أتوب إليه عدد ما كان و عدد مايكون و عدد الحركات و السكون"
Private Sub qte_vente_KeyDown(sender As Object, e As KeyEventArgs) Handles qte_vente.KeyDown
If e.KeyCode = Keys.Enter Then
If qte_vente.Text = "" Or qte_vente.Text = "0" Then
MsgBox("أدخل الكمية المطلوبة")
Else
For i As Integer = 0 To DGVBill.Rows.Count - 1
If DGVBill.Rows(i).Cells(1).Value = codebare_vente.Text Then
DGVBill.Rows(i).Cells(5).Value = Val(DGVBill.Rows(i).Cells(5).Value + Val(qte_vente.Text))
calcul()
Exit Sub
Else
Dim row As DataRow = dt.NewRow
row(0) = gid()
row(1) = codebare_vente.Text
row(2) = designation_vente.Text
row(3) = unite_vente.Text
row(4) = pd_vente.Text
row(5) = qte_vente.Text
row(6) = ptotal_vente.Text
dt.Rows.Add(row)
DGVBill.DataSource = dt
calcul()
End If
Exit Sub
Next
End If
End If
الآن الكود يقوم بمنع تكرار الصف الأول فقط في الداتاغريد فياو وليس في كل الداتاغريد فياو كما هو مطلوب ، رغم وجود الدالة For (i)
قال الله تعالى:" وقلت استغفروا ربكم إنه كان غفارا يرسل السماء عليكم مدرارا و يمددكم بأموال وبنين ويجعل لكم جنات ويجعل لكم أنهار"
"أستغفر الله العظيم و أتوب إليه عدد ما كان و عدد مايكون و عدد الحركات و السكون"
01-08-22, 03:24 AM (آخر تعديل لهذه المشاركة : 01-08-22, 03:53 AM {2} بواسطة سعود.)
إقتباس :Allow user to add Rows
هذي لا تفعل الخاصية كما استخدمتها بالكود .
و انما معناها ان رقم السطر الاخير يختلف في حالتين 1-السماح باضافة صف جديد وقت التشغيل 2- عدم السماح.
فلو كان مسموح يكون رقم الاخير = العدد الكلي ناقص 2
ولو غير مسموح يكون رقم الاخير = العدد الكلي ناقص 1
أبشرك حليتها
PHP كود :
Public Class Form1 Private Function gid() Return dgv.Rows.Count End Function Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill Randomize() btnGen.PerformClick() End Sub Private Sub btnGen_Click(sender As System.Object, e As System.EventArgs) Handles btnGen.Click txtbarcode.Text = Int(Rnd() * 999) End Sub
Private Function GetRowIndex(txt As String) As Integer For i As Integer = 0 To dgv.Rows.Count - IIf(dgv.AllowUserToAddRows, 2, 1) Dim row As String = dgv.Rows(i).Cells(1).Value If row = txt Then Return i Exit Function End If Next Return Nothing End Function
Private Sub txtq_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtq.KeyDown If e.KeyData = Keys.Enter Then If dgv.Rows.Count = IIf(dgv.AllowUserToAddRows, 1, 0) Then Dim row As New DataGridViewRow row.CreateCells(dgv) row.Cells(0).Value = gid() row.Cells(1).Value = txtbarcode.Text row.Cells(2).Value = txtname.Text row.Cells(3).Value = txtu.Text row.Cells(4).Value = txtunitpr.Text row.Cells(5).Value += Val(txtq.Text) dgv.Rows.Add(row) Else dgv.CurrentCell = dgv.Rows(GetRowIndex(txtbarcode.Text)).Cells(5) Dim row As String = dgv.CurrentRow.Cells(1).Value If row = txtbarcode.Text Then dgv.CurrentRow.Cells(5).Value = Val(dgv.CurrentRow.Cells(5).Value + Val(txtq.Text)) Else Dim Arow As New DataGridViewRow Arow.CreateCells(dgv) Arow.Cells(0).Value = gid() Arow.Cells(1).Value = txtbarcode.Text Arow.Cells(2).Value = txtname.Text Arow.Cells(3).Value = txtu.Text Arow.Cells(4).Value = txtunitpr.Text Arow.Cells(5).Value += Val(txtq.Text) dgv.Rows.Add(Arow) End If
End If End If End Sub
Private Sub dgv_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellValueChanged On Error Resume Next dgv.Rows(dgv.CurrentRow.Index).Cells(6).Value = Val(dgv.Rows(dgv.CurrentRow.Index).Cells(4).Value) * Val(dgv.Rows(dgv.CurrentRow.Index).Cells(5).Value) End Sub Private Sub dgv_RowsAdded(sender As Object, e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles dgv.RowsAdded dgv.Rows(e.RowIndex).Cells(6).Value = Val(dgv.Rows(e.RowIndex).Cells(4).Value) * Val(dgv.Rows(e.RowIndex).Cells(5).Value) End Sub