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 فقط عوض اضافة نفس العنصر
31-07-22, 11:53 PM (آخر تعديل لهذه المشاركة : 31-07-22, 11:54 PM {2} بواسطة سعود.)
هل يوجد كود بعد else ؟ (أقصد هل يوجد غير المكتوب هنا؟)
لان الفراغ يفرق في مربع النص .
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
المفروض بعد تعديل الكمية أن تعطي أمر انهاء الحلقة أو الاجراء كي لا يضيفه مرة أخرى
كأن :
- تضيف بعد كود الاضافة كود(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
End Class
المثال بعد التصليح
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير