هذا السب لإضافة حقل عناوين الكتب للكامبو بوكس
كود :
Public Sub Cmb()
On Error Resume Next
ComboBox1.Items.Clear()
For i As Integer = 0 To DataSet1.Tables("Tab").Rows.Count - 1
Dim a As String = DataSet1.Tables("Tab").Rows(i).Item("f1")
ComboBox1.Items.Add(a.PadLeft(ComboBox1.DropDownWidth * 15 / 100))
Next
End Sub
[/code]
وهنا لربط اسم الكتاب في الكامبو بباقي بيانات الكتاب في حدث SelectedIndexChanged
كود :
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
On Error Resume Next
Application.DoEvents()
Dim DataAdapter As New OleDbDataAdapter("SELECT * FROM Workers111111 WHERE f1 LIKE '" & ComboBox1.Text.Trim & "'", con)
con.Open()
DataSet1.Clear()
DataAdapter.Fill(DataSet1, "Tab")
con.Close()
End Sub
المشكلة هي انني عندما احمل الكامبو بوكس بارقام السجلات يمشي كويس حتى لو كرر عنوان الكتاب الف مرة
أما أذا وضعت به عناوين الكتاب وكان عندي تكرار لنفس عنوان الكتاب فانه يجعلها ببيانات واحدة
يعني لو ادخلت كتاب اسمه
الكامل في التاريخ لابن الأثير طبعة
مصر
ثم
الكامل في التاريخ لابن الأثير طبعة
بيروت
ثم
الكامل في التاريخ لابن الأثير طبعة
سوريا
يعرض في الكامبو الثلاثة الكتب كلها
الكامل في التاريخ
الكامل في التاريخ
الكامل في التاريخ
و لكن المشكلة عند التنقل بينها يعرض لي فقط بيانات الكتاب الأول
الكامل في التاريخ لابن الأثير طبعة
مصر
رغم أن الموجود ثلاثة كتب وعندي التنقل بينها الثلاثة كلها تعطيني بيانات الكتاب الأول
احساسي يقول أن الخطأ في هذه الجملة
FROM Workers WHERE f1 LIKE '" & ComboBox1.Text.Trim & "'", con)
(13-07-14, 12:26 AM)vbnet كتب : [ -> ].....
لم توفق في توضيح مشكلتك
f1 لم أفهم ماذا تعني
"الكامل في التاريخ لابن الأثير طبعة بيروت" هل هي معلومة كاملة في عمود واحد أم أنها جزئين أو ثلاث تم دمجهم وسبب سؤالي هذا
إقتباس :يعرض في الكامبو الثلاثة الكتب كلها
الكامل في التاريخ
الكامل في التاريخ
الكامل في التاريخ
حيث ذكرت "الكامل في التاريخ" فقط بدون الباقي
لو توضح وتضع أكواد التعبئة في ComboBox بعد "البحث"
ع العموم لابد من معرفة أرقام ID لكل سطر من ناتج البحث لتتمكن بهذاا الرقم من التنقل بين أسطر متشابهة في الاسم
.....
f1 = حقل عنوان الكتاب مرتبط بع 30 حقg أخر لم أذكرها لاختصار المشكلة
منها مثلا حقل للمؤلف و حقل لبلد النشر
اذا عنوان الكتاب = الكامل في التاريخ (فقط)
مرتبط به عدة بيانات منها
المؤلف = ابن الاثير
بلد النشر = مصر
اذا الكامبو بوكس يحوي f1 بيانات الكتاب
عند التغيير فيه
تظهر الحقول الثانية في التكست بوكس المرتبطة بباقي بيانات الكتاب
فان تم اختيار كتاب الكامل في التاريخ من الكامبو بوكس
ظهرت بيانات الكتاب الباقية
كاسم المؤلف (f2) و بلد النشر (f3) الخاصة بذلك الكتاب
متهيالي ممكن تستخدم الكود ب الشكل التالي لإدخال البيانات المتشابهة الي الكومبوبوكس
كود :
Dim myDictionary As Dictionary(Of String, String) = New Dictionary(Of String, String)
myDictionary.Add("1", "Ahmed")
myDictionary.Add("2", "ahmed")
myDictionary.Add("3", "Ahmed")
ComboBox1.DataSource = New BindingSource(myDictionary, Nothing)
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "Key"
في الحدث الخاص ب الكومبوبوكس و هو SelectedIndexChanged ضع الكود بالشكل التالي...انا فقط أضفت Labels للتوضيح يمكن أن تتعامل مع النتائج كما يحلو لك
كود :
Me.Label1.Text = CType(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Value
Me.Label2.Text = CType(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Key
مع فائق شكري لتجاوبكم السريع
يبدوا أنني لم أوفق في شرح مشكلتي
هذا الملف المرفق هو مثال مصغر قمت بتعديله ليسهل رفعه
بنفس أكواد مشروعي
حاول تتحرك في البيانات في الكامبو بوكس
حتى تصل لكتاب (الكامل في التاريخ )
ستجد أن البيانات ثابته وكانه كتاب واحد
رغم انها في قاعدة البيانات عددها 5 تقريبا
أريد عند التقليب بينها يتغير بيانات الكتاب
والتي قد تتفق في العنوان وتختلف في باقي البيانات
المشكلة ف اسلوب ادخال البايانات من الداتا بيز الي الكومبوبوكس و طالما أنك لديك بيانات متشابهة ف المسميات امر طبيعي ان الكومبو بوكس سيقوم بإهمالها ...... عموما ليس من المنطقي أن تعرض بيانات غيركاملة للمستخدم ف الكومبوبوكس أو بيانات متشابهة و تترك المستخدم يخمن أي البيانات يختار
الحلول كالأتي
إما ان تستخدم الحل اعلاه و تقوم بادخال البيانات الموجودة ف الداتا بيز أولا الي Dictionary كما ف المثال أعلاه
أو أن تقوم ببناء كومبوبوكس جديد يقبل البيانات ب الشكل الذي تريده أنت
(13-07-14, 01:56 AM)silverlight كتب : [ -> ]المشكلة ف اسلوب ادخال البايانات من الداتا بيز الي الكومبوبوكس و طالما أنك لديك بيانات متشابهة ف المسميات امر طبيعي ان الكومبو بوكس سيقوم بإهمالها ...... عموما ليس من المنطقي أن تعرض بيانات غيركاملة للمستخدم ف الكومبوبوكس أو بيانات متشابهة و تترك المستخدم يخمن أي البيانات يختار
الحلول كالأتي
إما ان تستخدم الحل اعلاه و تقوم بادخال البيانات الموجودة ف الداتا بيز أولا الي Dictionary كما ف المثال أعلاه
أو أن تقوم ببناء كومبوبوكس جديد يقبل البيانات ب الشكل الذي تريده أنت
الكمبو بوكس لم يهملها بل عرضها كلها الكتب المتشابهة
ولكنه لم يربطها مع التكست بوكس مع كافة الحقوق
بالنسبة للبيانات ليس كما ذكرت بل ستعرض كاملة
ولكن قد يكون هناك عشرة كتب بعنوان واحد
و ببيانات مختلف كاسم المؤلف و دار النشر
فمثلا تاريخ الأدب العربي هناك عشرات الكتب بهذا العنوان
وسيجها المستخدم في الكامبو بوكس ويختار حسب ما يريد
لانه راح يظهر له اسم المؤلف عند تغير حدث SelectedIndexChanged
فيظهر له
تاريخ الادرب العربي في الكامبو بوكس
و طه حسين مثلا في التكست بوكس مرتبط به كاسم مؤلف
وعندما يختار الكتاب الذي يليه والذي بنفس العنوان
تاريخ الادب العربي يظهر كارل بروكلمان في التكست بوكس المرتبط بنفس المؤلف
المثال المرفق فيه المشكلة و يسهلها العملية بسيطة ولكن لا اعرف صياغتها بالضبط
وهي تتلخص في اعتقادي في صياغة LIKE '""
تحياتي
يا أستاذي الفاضل الحل ان تستخدم BindingSource لأنه و بدون ربط البيانات المتكررة ب مفتاح معين ...هذا المفتاح الهدف منه هنا هو أنه و عند اختيار اي شئ من الكومبوبوكس يقوم باختيار البيانات المقابلة لهذا الإختيار و يعرضها ببشكل الذي تختاره انت لكن ف حالتك هنا قراءة البيانات تتم بشكل صحيح من الداتا بيز لكن عند عرض البيانات مع الاختيار يحدث الخطأ
لاحظ المثال التالي و كيف ان البيانات تتغير مع تغير المفتاح الذي حددناه لكل اختيار موجود ف الكومبوبوكس
كود :
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim myDictionary As Dictionary(Of String, String) = New Dictionary(Of String, String)
myDictionary.Add("1", "Ahmed")
myDictionary.Add("2", "Ahmed")
myDictionary.Add("3", "Ahmed")
ComboBox1.DataSource = New BindingSource(myDictionary, Nothing)
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "Key"
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Me.Label1.Text = CType(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Value
Select Case CType(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Key
Case 1
Label2.Text = "you are great"
Case 2
Label2.Text = "you are wrong"
Case 3
Label2.Text = "you are correct"
End Select
End Sub
End Class
عموما تاكد من ان الجملة المستخدمة لسحب البيانات من الداتا بيز مكتوبة برمجيا بشكل دقيق و لربما احد الزملاء الأفاضل من المهتمين ب الداتا بيز يستطيع مساعدنك ف ذلك
حاول تغير اسلوب كتابة StoredProcedures و تكتبه ب الشكل التالي
SELECT * FROM Workers WHERE F1 LIKE ''%'' + @ComboBox1.Text.Trim + "'%", con)
(13-07-14, 02:54 AM)silverlight كتب : [ -> ]حاول تغير اسلوب كتابة StoredProcedures و تكتبه ب الشكل التالي
SELECT * FROM Workers WHERE F1 LIKE ''%'' + @ComboBox1.Text.Trim + "'%", con)
بعد ما كتبته طلع كوماند أوت باللون الأخضر هذا الجزء بالذات
"'%", con
غيرت وبدلت لكن ما نفع
شكرا لك
قمت بعمل ما قلت لي بالضبط من ثلاث مرات
مرة باضافة الفورم اللى الموجود في المشاركة
ومرة ثانية باضافة فورم جديد
ومرة ثالثة بوضع الكود في الفورم الاول
لكنها كل المحاولات لم تنفع لم تنجح
اتمني التعديل في المشروع اللى في المشاركة فوق
عشان التناقضات