السّلام عليكم و رحمة الله و بركاته
سادتي الأكارم
الرجاء التوجيه و المساعدة لحل هذه الإشكالية .. بارك الله فيكم و لكم مقدّمًَا ..
لديّ كومبوبوكس يتم تعبئته باسم اسم الصنف من جدول الأصناف ..
يتم إختيار اسم الصنف من هذا الكومبوبوكس فيتم تعبئة بعض البيانات التي تخص هذا الصنف بالتاكسات بوكس ..
إلى هنا الأمور كلّها تمام ..
المشكلة سادتي الأكارم ..
لما يكون للصنف الواحد عدة نوعيات أو ما يسمى ماركات ..
مثلا .. الصنف ( القهوة ) له عدة نوعيات : أرابيسكا - نيسكافيه - بنت الريف
بالكومبوبوكس ستظهر كلمة القهوة 3 مرات لأني تعمدت عدم إستعمال عبارة DISTINCT
لكن البيانات بالتاكسات بوكس تبقى دائما ثابته للصنف القهوة النوعية الأولى فقط
لو كانت :
أرابيسكا = 125.698
نيسكافيه = 145.698
بنت الريف = 168.954
لما أختار القهوة من الكومبوبوكس تظهر بالتاكسات بكس فقط : أرابيسكا و 125.698
حتى لو إخترت من الكومبوبكس القهوة الثانية فلا تتغير البيانات
بارك الله فيكم و لكم مقدما و جزاكم خير الجزاء
الكود المستعمل :
كود :
Private Sub CmbListItems_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbListItems.SelectedIndexChanged
Try
Dim Cmd_Pos As SqlCommand = New SqlCommand()
Dim Reader_Pos As SqlDataReader = Nothing
If Conne_2019.State = ConnectionState.Open Then Conne_2019.Close()
Conne_2019.Open()
Dim Query_Pos As String = " SELECT * From TBL_ITEMS Where ITEMS_Name = '" & CmbListItems.Text.Trim & "'"
Cmd_Pos = New SqlCommand(Query_Pos, Conne_2019)
Reader_Pos = Cmd_Pos.ExecuteReader()
While Reader_Pos.Read
If Reader_Pos IsNot Nothing Then
Me.TxtItemName.Text = Reader_Pos.Item("ITEMS_Name")
Me.TxtItemQualite.Text = Reader_Pos.Item("ITEMS_Qualite")
Me.CmbItemUnite.Text = Reader_Pos.Item("ITEMS_Unite")
Me.TxtItemStock.Text = Reader_Pos.Item("ITEMS_Stock")
Me.TxtItemPrice.Text = Reader_Pos.Item("ITEMS_Prix_Vente")
Me.TxtItemBarcode.Text = Reader_Pos.Item("ITEMS_Barcode")
End If
End While
If Conne_2019.State = ConnectionState.Open Then Conne_2019.Close()
Catch ex As Exception
MsgBox("خطأ غير معيّن أثناء عملية الإستعلام" & ex.ToString & vbCrLf)
End Try
End Sub
تحياتي
السلام عليكم اخي عبد العزيز اتمنى انك بألف خير
جرب ربط الكومبو بكس بقاعدة البيانات حيث كل item يتم ربطه بالمعرف الخاص به
PHP كود :
cmb.datasource = dt
cmb.DisplayMember="إسم الصنف"
cmb.ValueMember=id
السّلام عليكم و رحمة الله و بركاته
بارك الله فيك و لك و جزاك خير الجزاء أخي الكريم العربي على المساعدة
للأسف لم تضبط يا غالي ..
تحياتي
(13-12-19, 03:03 AM)عبد العزيز البسكري كتب : [ -> ]السّلام عليكم و رحمة الله و بركاته
سادتي الأكارم
الرجاء التوجيه و المساعدة لحل هذه الإشكالية .. بارك الله فيكم و لكم مقدّمًَا ..
لديّ كومبوبوكس يتم تعبئته باسم اسم الصنف من جدول الأصناف ..
يتم إختيار اسم الصنف من هذا الكومبوبوكس فيتم تعبئة بعض البيانات التي تخص هذا الصنف بالتاكسات بوكس ..
إلى هنا الأمور كلّها تمام ..
المشكلة سادتي الأكارم ..
لما يكون للصنف الواحد عدة نوعيات أو ما يسمى ماركات ..
مثلا .. الصنف ( القهوة ) له عدة نوعيات : أرابيسكا - نيسكافيه - بنت الريف
بالكومبوبوكس ستظهر كلمة القهوة 3 مرات لأني تعمدت عدم إستعمال عبارة DISTINCT
لكن البيانات بالتاكسات بوكس تبقى دائما ثابته للصنف القهوة النوعية الأولى فقط
لو كانت :
أرابيسكا = 125.698
نيسكافيه = 145.698
بنت الريف = 168.954
لما أختار القهوة من الكومبوبوكس تظهر بالتاكسات بكس فقط : أرابيسكا و 125.698
حتى لو إخترت من الكومبوبكس القهوة الثانية فلا تتغير البيانات
بارك الله فيكم و لكم مقدما و جزاكم خير الجزاء
الكود المستعمل :
كود :
Private Sub CmbListItems_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbListItems.SelectedIndexChanged
Try
Dim Cmd_Pos As SqlCommand = New SqlCommand()
Dim Reader_Pos As SqlDataReader = Nothing
If Conne_2019.State = ConnectionState.Open Then Conne_2019.Close()
Conne_2019.Open()
Dim Query_Pos As String = " SELECT * From TBL_ITEMS Where ITEMS_Name = '" & CmbListItems.Text.Trim & "'"
Cmd_Pos = New SqlCommand(Query_Pos, Conne_2019)
Reader_Pos = Cmd_Pos.ExecuteReader()
While Reader_Pos.Read
If Reader_Pos IsNot Nothing Then
Me.TxtItemName.Text = Reader_Pos.Item("ITEMS_Name")
Me.TxtItemQualite.Text = Reader_Pos.Item("ITEMS_Qualite")
Me.CmbItemUnite.Text = Reader_Pos.Item("ITEMS_Unite")
Me.TxtItemStock.Text = Reader_Pos.Item("ITEMS_Stock")
Me.TxtItemPrice.Text = Reader_Pos.Item("ITEMS_Prix_Vente")
Me.TxtItemBarcode.Text = Reader_Pos.Item("ITEMS_Barcode")
End If
End While
If Conne_2019.State = ConnectionState.Open Then Conne_2019.Close()
Catch ex As Exception
MsgBox("خطأ غير معيّن أثناء عملية الإستعلام" & ex.ToString & vbCrLf)
End Try
End Sub
تحياتي
غير التاكست TxtItemQualite الى كومبوبكس CmbItemQualite
كود :
Private Sub CmbListItems_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbListItems.SelectedIndexChanged
Try
Using da As New SqlDataAdapter("SELECT ITEMS_Qualite From TBL_ITEMS Where ITEMS_Name = '" & CmbListItems.Text.Trim & "'", Conne_2019)
Dim dt As New DataTable
da.Fill(dt)
CmbItemQualite.DataSource = dt
CmbItemQualite.DisplayMember = "ITEMS_Qualite"
End Using
Catch ex As Exception
MsgBox("خطأ غير معيّن أثناء عملية الإستعلام" & ex.ToString & vbCrLf)
End Try
End Sub
Private Sub CmbItemQualite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbItemQualite.SelectedIndexChanged
Try
Dim Query_Pos As String = " SELECT * From TBL_ITEMS Where ITEMS_Name = '" & CmbListItems.Text.Trim & "' And ITEMS_Qualite = '" & CmbItemQualite.Text.Trim & "'"
Using da As New SqlDataAdapter(Query_Pos, Conne_2019)
Dim dt As New DataTable
If da.Fill(dt) > 0 Then
Me.CmbItemUnite.Text = dt.Rows(0).Item("ITEMS_Unite")
Me.TxtItemStock.Text = dt.Rows(0).Item("ITEMS_Stock")
Me.TxtItemPrice.Text = dt.Rows(0).Item("ITEMS_Prix_Vente")
Me.TxtItemBarcode.Text = dt.Rows(0).Item("ITEMS_Barcode")
End If
End Using
Catch ex As Exception
MsgBox("خطأ غير معيّن أثناء عملية الإستعلام" & ex.ToString & vbCrLf)
End Try
End Sub
السّلام عليكم و رحمة الله و بركاته
سلمت أخي الحبيب Smalw و سلم يمينك و دينك
بارك الله فيك و لك و جزاك خير الجزاء و أحسن إليك مثلما أحسنت بهذا العمل و هذه المساعدة المميّزة
بعدما يئست من الحل و قمت بدمج اسم الصنف مع النوعية بحقل واحد
جاء الخلاص و الفرج من عند الله ثم من عندك أخي الغالي
حل أكثر من الرائع و يفي بالغرض و هو المطلوب بالذات
تحياتي واحتراماتي و تقييماتي
السلام عليكم اخي عبد العزيز
انت تستخدم Combobox1.text في البحث وبما ان الاسم قهوة مكرر فالنتيجة واحدة وهي اول قيمة اي اول سجل
لان القيمة الموجودة في الكومبو هي نص وكلمة قهوة هي نفسها وانت تجلب بالنص
تحتاج الى البحث باسم المعرف ID بحيث يساوي Combobox1.SelectedValue اي ان جملة الاستعلام ستكون هكذا
كود :
"select * from From TBL_ITEMS Where Itm_id = " & ComboBox1.SelectedValue, con
السّلام عليكم و رحمة الله و بركاته
أشكرك جزيل الشكر أخي الغالي " ابراهيم " على الشّرح و التعقيب و التّوضيح
بارك الله فيك يا طيّب
فكّرت في هذا الحل و حلول أخرى لكن لم أتوصّل إلى النتيجة المرجوّة
المشكلة أخي ابراهيم
أنّ هذه العملية كتجربة منّي لفاتورة مبيعات فوريّة
و البحث باسم الصنف إجباري مع الإكمال التلقائي للكومبوبوكس
أمّا استعمال رقم الإيدي للأصناف وسط مئات الأرقام و مئات أسماء الأصناف قد لا يتذكّره البائع
تحياتي واحتراماتي لشخصك القدير
السلام عليكم
اخي عبد العزيز يبقى الكومبو يعرض اسماء المنتجات كما هي DisplayMember
ولكن البحث سيأخذ ال ValueMember اي القيمة التي ستعود الى ال Id وهي غير ظاهرة في الكومبو بوكس
لانك عندما تملا الكومبو من الجدول سيأخذ قيمتين واحدة تعرض هي DisplayMember واخرى مخفية هي ValueMember
تقصد أخي ابراهيم سيكون بهذا الشكل لو سمحت ..
كود :
Private Sub Fill_Table_Items()
Dim InfoTable = New DataTable
Dim InfoAdapter = New SqlDataAdapter("SELECT * From TBL_ITEMS Where ITEMS_Id = " & ComboBox1.SelectedValue, Conne_2019)
InfoAdapter.Fill(InfoTable)
If InfoTable.Rows.Count > 0 Then
With Me.ComboBox1
.DataSource = InfoTable
.DisplayMember = "ITEMS_Name"
End With
End If
Conne_2019.Close()
End Sub
السلام عليكم اخي عبد العزيز
نقوم بعمل صب لاملاء الكومبوبوكس باسماء المنتجات مثل هذا ولكن حسب الجدول وحقل المعرف والاسم الذي عندك
كود :
Public Sub fillcmb_from_Items(ByVal cmb As ComboBox)
'load Items in Combobox
Dim dt As New DataTable
Dim da As New OleDbDataAdapter
dt.Clear()
da = New OleDbDataAdapter("Select * from Items ", con)
da.Fill(dt)
If dt.Rows.Count > 0 Then
cmb.DataSource = dt
cmb.DisplayMember = "Itm_Name"
cmb.ValueMember = "Itm_ID"
Else
cmb.DataSource = Nothing
End If
End Sub
ثم ننادي عليه في حدث فورم لود ونضع له الباراميتر وهو اسم الكومبو الذي سوف يملأ
لاحظ هناك قيمتين واحدة للعرض DisplayMember اسماء المنتجات والثانية ValueMember وهي للاي دي وهي غير ظاهرة
وفي حدث ComboBox1_SelectedIndexChanged ننشئ جملة البحث بحيث عندما نختار الاسم من الكومبو بوكس يكون الشرط هو ان الاي دي يساوي ال ValueMember أي Combobo1.selectedvalue لان كل عنصر مرتبط به وهنا هو الايدي
وبعدها تقوم بعرض النتائج في مربعات النصوص هذه هي الفكرة
افصل بين كود تعبئة الكومبوبوكس وكود البحث
ملاحظة اخرى اجعل القيمة الافتراضية للكومبوبوكس في جدث فورم لود بـ -1 اي لاظهور لاي اسم منتج
كود :
Combobo1.selectedvalue=-1