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

نسخة كاملة : combobox لا يعرض الداتا عند عمل select
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

اقوم يكتابة كود select في حدث combobox1.selectedindex

Dim com1 As New SqlCommand("select * from table_1 where id='" & Val(ComboBox4.Text) & "' ", con)
Dim s1 As New DataSet
Dim t1 As New SqlDataAdapter
t1.SelectCommand = com1
t1.Fill(s1, "table_1")
If s1.Tables(0).Rows.Count <> 0 Then
ComboBox1.DataSource = s1.Tables("table_1")
ComboBox1.DisplayMember = "name"
ComboBox1.ValueMember = "name"
End If
ولكن لا يعرض الداتا في combobox1 على الرغم من اني قمت بكتابة الكود في الجدول الخاص بالداتا في ال sql وتم عرض الاسم الخاص بال id
ملحوظة الكود يعمل في مكان اخر من الproject
ملحوظة تتكرر كثيرا هذه المشكلة الخاصة ب امر select في حدث combobox.selectedindex
ارجو الافادة وشكرا
أنت الآن في الحدث 
ComboBox.SelectedIndexChanged Event

وتقوم بإسناد مصدر البيانات ( DataSource ) إلى الـــ ComboBox1
عنما تقوم بإسناد أو تحديد مصدر البيانات للـ ComboBox1
ينتج عن هذا الأمر ( أحداث كثيرة ) ومن ضمنها إزالة أي عناصر في الــ ComboBox1 وربطها بالعناصر في الــ DataSource  الجديدة التي وضعتها أنت الآن
وهذا الأمر ينتج عنة أن يكون العنصر المحدد هو أول عنصر في المجموعة الموجودة في الــ DataSource 
مما يجبر الـــ ComboBox1 على إطلاق الحدث ( ComboBox.SelectedIndexChanged ) مره أخرى 
لاحظ أنك في الحدث  ( ComboBox.SelectedIndexChanged ) ولم تنتهي من الإجراءات التي كتبتها في هذا الحدث 
بالرغم من ذلك يتم إطلاقة مرة أخرى وأنت في منتصف الحدث القديم

إذا كانت لديك فكرة معينة لإعادة تعبئة الــ ComboBox1 من نفس الحدث الخاص به , 
قم بإنشاء متغير يدل على أنك تقوم بإعادة إسناد مصدر البيانات حتى تقوم بالخروج من الحدث 

مثلاً : قم بلإعلان عن متغير بإسم ( DataSourceIsChanging ) من نوع ( Boolean ) ( خارج الحدث )

Dim DataSourceIsChanging As Boolean = False

الأن في داخل الحدث وعند أول سطر تحقق من هذا المتغير حتى لا تتكرر الإجراءات
[attachment=17583]







ملاحظات فقط لا غير :
مصدر البيانات يتم إسنادة مرة واحدة فقط عند إنشاء النافذة , لا تحتاج أن تقوم بإسنادة في كل مرة

لماذا تقوم بإنشاء DataSet في كل مرة
لماذا تقوم بإنشاء SqlDataAdapter في كل مرة

قم بإنشائهم مرة واحدة فقط 
في الحدث New مثلاً الخاص بالنافذة 
أو حتى أعلن عنها وإنشئها في العام الخاص بالنافذة ( ستتم قبل الحدث New )

كل ما عليك هو إعادة إستخدامها