منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : ComboBox تعبني مع LIKE '""
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
هذا السب لإضافة حقل عناوين الكتب للكامبو بوكس

كود :
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

غيرت وبدلت لكن ما نفع
شكرا لك

قمت بعمل ما قلت لي بالضبط من ثلاث مرات
مرة باضافة الفورم اللى الموجود في المشاركة
ومرة ثانية باضافة فورم جديد
ومرة ثالثة بوضع الكود في الفورم الاول


لكنها كل المحاولات لم تنفع لم تنجح
اتمني التعديل في المشروع اللى في المشاركة فوق

عشان التناقضات
الصفحات : 1 2