الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

فلترة البيانات داخل combox بناء على كمبو تاني

بدأه ميدو صلاح في 25 أبريل 2010 · 2 رد · 1,069 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أخواني السلام عليكم

عندي فورم فيه 3 كمبوبوكس محتاج لما أختار اسم الصف من كمبو1 يظهر أسماء الفصول الخاصة بالصف في كمبو2 وهكذا عند اختيار الفصل في كمبو2 يظهر اسماء الطلاب في كمبو3

أنا باستخدم فيجوال ستوديو 2005 وأكسس 2003

أنا بحثت كثير ولم أجد حل، وجدت حل على فيجوال بيسك 6 فقمت بعمل upgrade من خلال تطبيق فيجوال ستوديو 2005 واشتغل معاي ونفذته بس المشكلة انه بيعتمد على الاتصال عن طريق Adodb

وطبعا بيعمل مشاكل مع الاتصال اللي أنا مستخدمة وهو Ado.net لأن الأكواد وكل شيء بستخدمه بيختلف عن الاتصال القديم Adodb

كل اللي محتاجة يا اخوان تحول الكود التالي إلى كود يتوافق مع ado.net وجزاكم الله خيرا

والكود هو

    Dim db As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Public sql As String


    Private Sub cmbosaf_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbosaf.SelectedIndexChanged
        db.Provider = "Microsoft.JET.OLEDB.4.0;"
        db.Open(My.Application.Info.DirectoryPath & "\StDb.mdb")
        rs.Open("[Fosool]", db, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly)


        Dim i As Object
        If rs.State = 1 Then rs.Close()
        rs.Open("SELECT faslname FROM Fosool WHERE alsaf LIKE '" + txtsaf.Text + "'")
        If rs.EOF Then
            cmbofasl1.Items.Clear()
        Else
            cmbofasl1.Items.Clear()
            For i = 1 To rs.RecordCount
                cmbofasl1.Items.Add(rs.Fields("faslname").Value)
                rs.MoveNext()
            Next
        End If
    End Sub

لو في أي شيء غير واضح برجاء اعلامي فأنا محتاج الكود ضروري جدا جدا والله العظيم

#2

الأمر يعتمد على طريقة ملأ ComboBox الأول، أقترح عليك ما يلي:

أن تنشئ DataTable مع DataAdapter يجلب البيانات من جدول الصفوف (يجلب ID و الإسم ..)

dim cmd as oledbCommand
cmd = conn.createCommand
cmd.commandtext = "select ID, Name from ..."
dim DT as new datatable("Classes")
dim da as new oleDBdataAdapter(cmd)

da.fill(dt)

combobox1.datasource = dt
combobox1.displaymember = "Name"
combobox1.valuemember = "ID"

ثم بعد ذلك في حدث SelectedValueChanged بالنسبة لCombobox1 تقوم بإرسال Command لجلب الفصول باستخدام بارامتر يأخذ قيممته من Combobox1.selectedvalue

cmd = conn.createCommand
cmd.commandText = "Select ID,Name From Fosoul Where alsaf LIKE @saf"
cmd.parameters.addWithValue("@saf", combobox1.selectedvalue)

dim da as new oledbdataAdapter(cmd)
dim dt as new dataTable("fosoul")

da.fill(dt)

combobox2.datasource = dt
combobox2.displaymember = "Name"
combobox2.valuemember = "ID"

إذا لم يكن لديك ID في جدول الفصول و الصفوف يمكنك استعمال نفس الأمر بإزالة ID من Select واستخدام الإسم في الحالتين Valuemember و DisplayMember، يمكن أن تتحقق من أن المستخدم قام فعلا باختيار عنصر من الصفوف قبل تنفيذ الأمر

كذلك يمكن عدم فتح الإتصال في كل مرة، واستخدام BindingSource مع خاصية Filter حيث يتم جلب جميع الفصول ، ثم فلترتها حسب الصف الذي تم اختياره في Combobox1

#3

أخي الكريم عمران أدام الله عزك ورفع من شأنك وزادك من علمه أمين يا رب

أحييك على هذا الحل الرائع فعلاً الكود شغال 100 % شكرا شكرا جزيلا

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…