لدي جدول مربوط DataGridView اريد ان اعمل ComboBox بحث عندما اختار منها يظهر لي الناتج في DataGridView اي اريد ان ابحث في الدات كراد
البحث بالكومبكس
السلام عليكم ورحمة الله وبركاته
قم بربط الجريد باستخدام DataView وفى حدث SelectedValueChanged التابع للكومبو قم بتغيير خاصية RowFilter للداتا فيو
إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال
انا مبتداء ارجو توضيح ذلك
جرب هذا الكود
- Public Class Form1
- Dim dtGrid, dtCombo As DataTable
- Dim dvGrid As DataView
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load - 'تهيئة الجدول
- dtGrid = New DataTable
- dtGrid.Columns.Add("Id", GetType(Integer))
- dtGrid.Columns.Add("Name", GetType(String))
- 'ملأ الجدول ببيانات افتراضية
- dtGrid.Rows.Add(1, "محمد")
- dtGrid.Rows.Add(2, "محمود")
- dtGrid.Rows.Add(3, "خالد")
- dtGrid.Rows.Add(4, "ياسر")
- dtGrid.Rows.Add(5, "عمار")
- 'تهيئة عارض البيانات
- dvGrid = New DataView(dtGrid)
- 'يمكن أيضا تهيئته بهذه الطريقة
- 'dv = dt.DefaultView
- 'ربط الجريد
- Me.DataGridView1.DataSource = dvGrid
- 'تهيئة مصدر بيانات الكمبو عن طريق أخذ نسخة من مصدر بيانات الجريد
- dtCombo = dtGrid.Copy
- 'ملأ الكومبو
- Me.ComboBox1.DataSource = dtCombo
- Me.ComboBox1.DisplayMember = "Name"
- Me.ComboBox1.ValueMember = "Id"
- End Sub
- Private Sub ComboBox1_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System
.EventArgs) Handles ComboBox1.SelectedValueChanged - Try
- dvGrid.RowFilter = "Id=" & Me.ComboBox1.SelectedValue
- Catch ex As Exception
- dvGrid.RowFilter = ""
- End Try
- End Sub
- End Class
إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال
جزاك الله خيرا
جاري التجربة
تريد وضع ComboBox وتعديل محتويات الداتاغريد حسب محتويات ComboBox بحيث يتم عرض فواتير الزبون المحدد في ComboBox ضمن الداتاغريد وكلما غيرت اسم الزبون ظهرت في الداتاغريد فواتيره فقط.
هل فهمت الكود السابق؟
الكود يحتوى على ماتريد ,, فقط ستغير مصادر البيانات وأسماء الحقول
إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال
أهلاً أخي الكريم،
قم بإضافة ( Combo Box) إلى الـ( Form ) الحاوية للـ( Data Grid View ) إذا كنت تستخدم ( Data Set ) فاعتمادك سيكون على ( Binding Source ) والذي يحوي الخاصية ( Filter ) التي تساعدك على قلترة البيانات أو بمعنى أخر ( عرض البيانات حسب شروط معينة ) وعلى هذا الأساس يمكننا أن نصنع شيء من هذا القبيل :
في بادىء الأمر عليّك إضافة البيانات إلى الـ( Combo Box) إما بشكل يدوي اي عن طريق إدخال قيم له في المصمم ( Designer ) أو بشكل برمجي عن طريق إضافة عناصر إلى الـ( Combo Box ) أو عن طريق استخدام مصدر بيانات أخر أي بإعداد الخاصية ( Data Source ) للـ( Combo Box ) ، الأن نقوم كما ذكرنا بإعداد الخاصية ( Filter ) للـ( Binding Source ) تحت حدث الـ( SelectedIndexChanged ) للـ( Combo Box ) ليصبح بالشكل التالي :
Private Sub CBFilter_SelectedIndexChanged(Byval Sender As Object, _
Byval E As System.EventArgs ) Handles CBFilter.SelectedIndexChanged
If CBFilter.SelectedItem IsNot Nothing Then
Dim EXP As String = String.Format("{0} = {1}", "ColumnName", CBFilter.SelectedItem.ToString())
BindingSource1.Filter = EXP
End If
End Subوإذا كان اعتمادك على الـ( Code ) في استيراد البيانات :
أيضاً عليّك تحديد عناصر الـ( Combo Box ) ومن ثم تمثيل الإستعلام بشرط ليتم إستيراد البيانات حسب العلاقة بين كل من قيمة الـ( Combo Box ) وقيمة الخلية التابعة للسجل الحالي :
Private Sub CBFilter_SelectedIndexChanged(Byval Sender As Object, _
Byval E As System.EventArgs ) Handles CBFilter.SelectedIndexChanged
If CBFilter.SelectedItem IsNot Nothing Then
Dim Conn As New SqlConnection("ConnectionString" )
Dim ADP As New SqlDataAdapter( "Select * From TableName Where ColumnName = " & _
CBFilter.SelectedItem.ToString, Conn )
Dim DT As New DataTable("TableName")
Try
Conn.Open
ADP.Fill( DT )
Catch SQEX As SqlException
MsgBox( SQEX.Message )
Catch EX As Exception
MsgBox( Ex.Message )
Finally
ADP.Dispose()
Conn.Close()
End Try
DataGridView1.DataSource = DT
End If
End Subبالتوفيق :)
GHOST2010 كتب:جرب هذا الكود[color= #800000;]Public Class Form1 [color= #800000;]Dim dtGrid, dtCombo [color= #800000;]As DataTable [color= #800000;]Dim dvGrid [color= #800000;]As DataView [color= #800000;]Private [color= #800000;]Sub Form1_Load[color= #66cc66;](ByVal sender [color= #800000;]As System.[color= #66cc66;]Object, ByVal e [color= #800000;]As System.[color= #66cc66;]EventArgs[color= #66cc66;]) Handles MyBase.[color= #66cc66;]Load [color= #008000;]'تهيئة الجدول dtGrid = [color= #800000;]New DataTable dtGrid.[color= #66cc66;]Columns.[color= #66cc66;]Add[color= #66cc66;]([color= #ff0000;]"Id", GetType[color= #66cc66;]([color= #800000;]Integer[color= #66cc66;])[color= #66cc66;]) dtGrid.[color= #66cc66;]Columns.[color= #66cc66;]Add[color= #66cc66;]([color= #ff0000;]"Name", GetType[color= #66cc66;]([color= #800000;]String[color= #66cc66;])[color= #66cc66;]) [color= #008000;]'ملأ الجدول ببي انات افتراضية dtGrid.[color= #66cc66;]Rows.[color= #66cc66;]Add[color= #66cc66;]([color= #cc66cc;]1, [color= #ff0000;]"محمد"[color= #66cc66;]) dtGrid.[color= #66cc66;]Rows.[color= #66cc66;]Add[color= #66cc66;]([color= #cc66cc;]2, [color= #ff0000;]"محمود"[color= #66cc66;]) dtGrid.[color= #66cc66;]Rows.[color= #66cc66;]Add[color= #66cc66;]([color= #cc66cc;]3, [color= #ff0000;]"خالد"[color= #66cc66;]) dtGrid.[color= #66cc66;]Rows.[color= #66cc66;]Add[color= #66cc66;]([color= #cc66cc;]4, [color= #ff0000;]"ياسر"[color= #66cc66;]) dtGrid.[color= #66cc66;]Rows.[color= #66cc66;]Add[color= #66cc66;]([color= #cc66cc;]5, [color= #ff0000;]"عمار"[color= #66cc66;]) [color= #008000;]'تهيئة عارض الب يانات dvGrid = [color= #800000;]New DataView[color= #66cc66;](dtGrid[color= #66cc66;]) [color= #008000;]'يمكن أيضا تهيئ ته بهذه الطريقة [color= #008000;]'dv = dt.DefaultView [color= #008000;]'ربط الجريد [color= #800000;]Me.[color= #66cc66;]DataGridView1.[color= #66cc66;]DataSource = dvGrid [color= #008000;]'تهيئة مصدر بيا نات الكمبو عن طر& #1610;ق أخذ نسخة من مص& #1583;ر بيانات الجري 583; dtCombo = dtGrid.[color= #66cc66;]Copy [color= #008000;]'ملأ الكومبو [color= #800000;]Me.[color= #66cc66;]ComboBox1.[color= #66cc66;]DataSource = dtCombo [color= #800000;]Me.[color= #66cc66;]ComboBox1.[color= #66cc66;]DisplayMember = [color= #ff0000;]"Name" [color= #800000;]Me.[color= #66cc66;]ComboBox1.[color= #66cc66;]ValueMember = [color= #ff0000;]"Id" [color= #800000;]End [color= #800000;]Sub [color= #800000;]Private [color= #800000;]Sub ComboBox1_SelectedValueChanged[color= #66cc66;](ByVal sender [color= #800000;]As System.[color= #66cc66;]Object, ByVal e [color= #800000;]As System .[color= #66cc66;]EventArgs[color= #66cc66;]) Handles ComboBox1.[color= #66cc66;]SelectedValueChanged Try dvGrid.[color= #66cc66;]RowFilter = [color= #ff0000;]"Id=" & [color= #800000;]Me.[color= #66cc66;]ComboBox1.[color= #66cc66;]SelectedValue Catch ex [color= #800000;]As Exception dvGrid.[color= #66cc66;]RowFilter = [color= #ff0000;]"" [color= #800000;]End Try [color= #800000;]End [color= #800000;]Sub [color= #800000;]End Class
عفواً عفواً :(، فتحت هذا الموضوع من حوالي ساعتين ونصف :( وذهبت لأقوم بشيء هام وعندما عدت كتبت الجواب بدون أن أعمل ( Refresh ) للصفحة ( لم أرى أن هناك من أجاب السؤال :( )
بالتوفيق :)
تم تعديل هذه المشاركة بواسطة Bashar Rabat في 30 سبتمبر 2009 في 14:42
The important thing is not so much
that every child should be taught,
as that every child should be given the wish to learn.
جاري التجربة واعلامك جزاك الله خيرا
السلام عليكم
اخي يمكنك استخدام دالة الدوران for للبحث
for i as integer = 0 to database.table.count-1
code serach
next
بسم الله الذي لا يضر مع اسمه شيء بالارض ولا بالسماء وهو السميع العليم
الاخوة الافاضل
حاولت التطبيق علي الكود المطروح من الاخ محمد مهدي علي الطريقة التي أعمل بها
وكانت النتائج كالتالي
ملئت الداتا جريد فيو بالبيانات
ملئت الكمبو بوكس بالبيانات
مش باقي غير طريقة البحث من خلال البيانات الموجوده في الكمبو بوكس داخل داتا جريد فيو
برجاء المساعده ومرفق مثال علي تجربتي


السلام عليكم اخي الحبيب المعذرة على التدخل إن كنت تريد فلترة البيانات في الداتا قريد عن طريق الكومبوبكس فلايحتاج إلى كل هذا الجهد فقط سطرين تكفي
اولا اخي الحبيب ان تقوم بعمل علاقة بين الجدولين
ثانيا في حدث اللود للفورم اكتب التالي لوفرضنا ان اسم العلاقة هو relmember .
combobox.datasource=dataset1 combobox.displaymember="members.name" combobox.valuemember="members.id" datagrid1.datasource=dataset1 datagrid1.datamemeber="members.relmembers"
إن لم يعمل معك الكود سوف اقوم بادراج مثال او تعديل مثالك حتى يعمل
أنا الرجل الضرب الذي تعرفونه***خشاش كرأس الحية المتوقد
لوكنت وغلاً في الرجال لضرني**** حسن جرائتي ومقتدي
كيف اعمل علاقة بين جدولين لنفرض الجدول الرئيسي جدول " الاقسام " والجدول الثاني جدول "الموظفين "
عملت كما طلبت مني لكن لم يعمل كما اريد
ومرفق مثال لذلك ارجوا ملاحظة الاخطاء comboxreleation.rar
حياك الله اخي الحبيب
لقد قمت بتعديل البرنامج وارفقت له لك ارجوا ان يكون الامر واضح لك :wink:
أنا الرجل الضرب الذي تعرفونه***خشاش كرأس الحية المتوقد
لوكنت وغلاً في الرجال لضرني**** حسن جرائتي ومقتدي
استاذي ابو عزام
المرفق هو نفس مثالي اي لم يجري علية اي تغيير ارجو ارفاق الملف المعدل
اساتذتي الاجلاء
ارجو ملاحظة طلبي
اقتباسعملت كما طلبت مني لكن لم يعمل كما اريدومرفق مثال لذلك ارجوا ملاحظة الاخطاء comboxreleation.rar ( 71.17كيلوا بايت ) عدد مرات