السلام عليكم الأخوة الكرام
احتاج كود للبحث في قاعدة البيانات من نوع SQL كالتالي :
لدي قاعدة بيانات فيها :
ItemCode
ItemName
ItemPrice
ولدي داتا جريد
كود الصنف - اسم الصنف - سعر الصنف
المطلوب البحث عن رقم الصنف من داخل التكست بوكس وانزال نتيجة البحث في الداتا جريد
لبرنامج فاتورة مبيعات
ارجو المساعدة
وعليكم السلام
أخي
لم تضع مشروع صغير للتوضيح
أنت تريد البحث عن رقم صنف محدد
وأكيد الناتج لن يزيد عن سطر واحد
فما علاقة الداتا جريد!
المعروف أن الداتا جريد مخصصة لعرض أسطر كثيرة!
عموما البحث يكون عن طريق where الخاصة بالاستعلام مثل select * from tbl where itemcode=1
والناتج تضيفه بحسب طريقتك في الكود
استخدمت هذا الكود ولاكن المشكلة بيضيف سطر واحد فقط وباقي الاسطر فارغة
If e.KeyChar = ChrW(Keys.Enter) Then
sql = "select ItemCode,ItemName,ItemPrice from Items where ItemCode ='" + TextBox1.Text + "'"
Dim dt_itm As New DataTable
dp = New OleDb.OleDbDataAdapter(sql, con)
dp.Fill(dt_itm)
dgv_data.Rows.Add()
dgv_data.Rows(0).Cells(0).Value = dt_itm.Rows(0)("ItemCode")
dgv_data.Rows(0).Cells(1).Value = dt_itm.Rows(0)("ItemName")
dgv_data.Rows(0).Cells(2).Value = dt_itm.Rows(0)("ItemPrice")
End If
هذي صورة توضيحية
صورة توضيحية
PHP كود :
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar <> ChrW(Keys.Enter) Then Return
Using dp As New OleDb.OleDbDataAdapter("SELECT * FROM [Items] WHERE [ItemCode] = @code", con)
dp.SelectCommand.Parameters.AddWithValue("@code", TextBox1.Text)
Dim dt_itm As New DataTable
If dp.Fill(dt_itm) > 0 Then
Dim r As DataRow = dt_itm.Rows(0)
dgv_data.Rows.Add(r("ItemCode"), r("ItemName"), r("ItemPrice"))
dgv_data.FirstDisplayedScrollingRowIndex = dgv_data.Rows.Count - 1
TextBox1.Clear()
TextBox1.Select()
End If
End Using
End Sub
جزاك الله خير اخي الكريم a.Ahmed
الى الان يا اخوان الكود تمام والمطلوب ولاكن انا اضفت قيمة وهي واحد لكل مره تنضاف الى الداتا جريد
الي احتاجه الان اذا اضفت صنف الى الجريد وكان مضاف من قبل ما اريد بياناته في سطر اخر احتاج زيادة الخلية الخاصة بالعدد الى 1
وكل ما تكرر صنف موجود بالداتا جريد نريد زيادة قيمة العدد ب 1ارفقت الصور لتوضيح ذلك
الصور التوضيحية
يعني اذا كان نفس الرقم موجود في الداتا جريد ما احتاج تكرار السطر وانما زيادة العدد فقط الى 2 او 3 او 4
PHP كود :
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar <> ChrW(Keys.Enter) Then Return
Using dp As New OleDb.OleDbDataAdapter("SELECT * FROM [Items] WHERE [ItemCode] = @code", con)
dp.SelectCommand.Parameters.AddWithValue("@code", TextBox1.Text)
Dim dt_itm As New DataTable
If dp.Fill(dt_itm) > 0 Then
Dim r As DataRow = dt_itm.Rows(0)
dgv_data.ClearSelection()
Dim dgvRow As DataGridViewRow = (From x In Me.dgv_data.Rows Where x.Cells(0).Value = r("ItemCode")).SingleOrDefault
If IsNothing(dgvRow) Then
dgv_data.Rows.Add(r("ItemCode"), r("ItemName"), r("ItemPrice"), 1)
dgv_data.FirstDisplayedScrollingRowIndex = dgv_data.Rows.Count - If(dgv_data.AllowUserToAddRows, 2, 1)
dgv_data.Rows(dgv_data.Rows.Count - If(dgv_data.AllowUserToAddRows, 2, 1)).Selected = True
Else
dgvRow.Cells(3).Value += 1
dgv_data.FirstDisplayedScrollingRowIndex = dgvRow.Index
dgv_data.Rows(dgvRow.Index).Selected = True
End If
TextBox1.Clear()
TextBox1.Select()
End If
End Using
End Sub
وفقك الله في الدنيا والاخرة
هل ممكن اخي الكريم ان اطلب بزيادة رقم 1 للكمية بمجرد الضغط على + داخل التكست او نقصان 1 للكمية اذا كانة اكثر من 1 واذا كانت الكمية 1 وعملت - يتم حذف السطر
طبعا هذا التعامل لاخر سطر في الداتا جريد
PHP كود :
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
dgv_data.AllowUserToAddRows = False
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
Select Case e.KeyChar
Case ChrW(Keys.Enter)
Using dp As New OleDb.OleDbDataAdapter("SELECT * FROM [Items] WHERE [ItemCode] = @code", con)
dp.SelectCommand.Parameters.AddWithValue("@code", TextBox1.Text)
Dim dt_itm As New DataTable
If dp.Fill(dt_itm) > 0 Then
Dim r As DataRow = dt_itm.Rows(0)
dgv_data.ClearSelection()
Dim dgvRow As DataGridViewRow = (From x In Me.dgv_data.Rows Where x.Cells(0).Value = r("ItemCode")).SingleOrDefault
If IsNothing(dgvRow) Then
dgv_data.Rows.Add(r("ItemCode"), r("ItemName"), r("ItemPrice"), 1)
dgv_data.FirstDisplayedScrollingRowIndex = dgv_data.Rows.Count - 1
dgv_data.Rows(dgv_data.Rows.Count - 1).Selected = True
Else
dgvRow.Cells(3).Value += 1
dgv_data.FirstDisplayedScrollingRowIndex = dgvRow.Index
dgv_data.Rows(dgvRow.Index).Selected = True
End If
TextBox1.Clear()
TextBox1.Select()
End If
End Using
Case "+"
Dim dgvRow As DataGridViewRow = (From x In Me.dgv_data.Rows).LastOrDefault
If Not IsNothing(dgvRow) Then
dgvRow.Cells(3).Value += 1
End If
e.Handled = True
Case "-"
Dim dgvRow As DataGridViewRow = (From x In Me.dgv_data.Rows).LastOrDefault
If Not IsNothing(dgvRow) Then
dgvRow.Cells(3).Value -= 1
If dgvRow.Cells(3).Value = 0 Then Me.dgv_data.Rows.RemoveAt(dgvRow.Index)
End If
e.Handled = True
End Select
End Sub
والله يا اخي الكريم حفظك الله وبارك في علمك
اسمح لي ولاكن عندي تصميم مشروع لواجهة نقاط البيع اشكرك جدا
الان بعد ما ذكرنا كل الى راح
لو عند الكاشير قطعة اخذ منها الزبون مثلا15 حبة نحتاج حل جيد لهذا مثلا :
كيف استطيع تحديد الكمية وباركود الصنف زي كذا
15+1000
يعني احتاج الكود الي يساوي 1000 والكمية تكون 15
والعكس صحيح يعني
15-1000
يعني انقاص 15 حبة من كمية الصنف رقم 1000
PHP كود :
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
dgv_data.AllowUserToAddRows = False
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
Select Case e.KeyChar
Case ChrW(Keys.Enter)
Dim code = sender.Text.Trim
Dim qty As Integer = 1
Dim spP() As String = sender.Text.Trim.Split("+")
If spP.Count = 2 Then
code = spP(0)
qty = spP(1)
End If
Dim spM() As String = sender.Text.Trim.Split("-")
If spM.Count = 2 Then
code = spM(0)
qty = -spM(1)
End If
Using dp As New OleDb.OleDbDataAdapter("SELECT * FROM [Items] WHERE [ItemCode] = @code", con)
dp.SelectCommand.Parameters.AddWithValue("@code", code)
Dim dt_itm As New DataTable
If dp.Fill(dt_itm) > 0 Then
Dim r As DataRow = dt_itm.Rows(0)
dgv_data.ClearSelection()
Dim dgvRow As DataGridViewRow = (From x In Me.dgv_data.Rows Where x.Cells(0).Value = r("ItemCode")).SingleOrDefault
If IsNothing(dgvRow) Then
If qty > 0 Then
dgv_data.Rows.Add(r("ItemCode"), r("ItemName"), r("ItemPrice"), qty)
dgv_data.FirstDisplayedScrollingRowIndex = dgv_data.Rows.Count - 1
dgv_data.Rows(dgv_data.Rows.Count - 1).Selected = True
End If
Else
dgvRow.Cells(3).Value += qty
dgv_data.FirstDisplayedScrollingRowIndex = dgvRow.Index
dgv_data.Rows(dgvRow.Index).Selected = True
If dgvRow.Cells(3).Value <= 0 Then Me.dgv_data.Rows.RemoveAt(dgvRow.Index)
End If
sender.Clear()
sender.Select()
End If
End Using
Case "+"
If sender.Text.Trim = "" Then
Dim dgvRow As DataGridViewRow = (From x In Me.dgv_data.Rows).LastOrDefault
If Not IsNothing(dgvRow) Then
dgvRow.Cells(3).Value += 1
End If
e.Handled = True
End If
Case "-"
If sender.Text.Trim = "" Then
Dim dgvRow As DataGridViewRow = (From x In Me.dgv_data.Rows).LastOrDefault
If Not IsNothing(dgvRow) Then
dgvRow.Cells(3).Value -= 1
If dgvRow.Cells(3).Value = 0 Then Me.dgv_data.Rows.RemoveAt(dgvRow.Index)
End If
e.Handled = True
End If
End Select
End Sub
Updated