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

مشكلة عند تعبئة Combobox داخل Datagridview

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

السلام عليكــم ورحمـة الله وبركاتــه ،،

لدى فاتورة شراء تحتوى على head [رقم الفاتورة ( text) - اسم المورد (Combobox)]

و details [عبارة عن datagridview من ضمن اعمدتها combobox لاختيار اسم الصنف]

اقوم بتعبئة combo اسم المورد من جدول الموردين و combo اسم الصنف من جدول الاصناف عند تحميل النموذج

المشكلة هى ان عندما يكون عدد الاصناف كبير يعنى مثلا 1000 صنف ياخذ النموذج وقت كبير جدا عند التحميل و يهنج و لا يمكن العمل على النموذج و لابد من اغلاق البرنامج و بالتالى لا يمكن العمل على النموذج فى حالة كبر عدد الاصناف المدخلة فى جدول الاصناف

اضع فى موديول الكود التالى

Public SqlConnection1 As SqlClient.SqlConnection = New SqlClient.SqlConnection

Public Sub FILLCOMBOBOXITEMS(ByVal TABLE As String, ByVal FIELD As String, ByVal FIELD1 As String, ByVal COMBO As Object)

On Error Resume Next

Dim I As Integer

Dim DS As New DataSet

Dim str As String = "SELECT DISTINCT " & FIELD & " , " & FIELD1 & " FROM " & TABLE

Dim ADP As New SqlClient.SqlDataAdapter(str, SqlConnection1)

DS.Clear()

ADP.Fill(DS, "TBL")

COMBO.Items.Clear()

For I = 0 To DS.Tables("TBL").Rows.Count - 1

COMBO.Items.Add(DS.Tables("TBL").Rows(I).Item(0))

Next I

COMBO.valuemember = DS.Tables("tbl").Rows(I).Item(1)

ADP.Dispose()

End Sub

و هذه الجملة التى استخدمها فى النموذج عند تحميل النموذج

FILLCOMBOBOXITEMS("ITEM", "Item_Name", "item_id", ITEM_ID)

ارجو ان اجد الحل لديكم

#2

مرحباً أخي الكريم :)

بما أنك تستخدم ( ComboBox ) فيمكن إعداد الخاصية ( DataSource ) للـ( ComboBox ) ومن ثم إعداد الخاصيتين ( DisplayMember ) و ( ValueMember ) بحسب الحاجة .

قم باستخدام ( DataTable ) عوضاً عن الـ( DataSet ) ومن ثم قم بإسناد الجدول المستورد أي الـ( DataTable ) إلى الخاصية ( DataSource ) .

الأن نأتي إلى خصائص العرض ( DisplayMember ) هنا عليّك إسناد اسم العامود أو الحقل المراد عرض قيم خلاياه بالـ( ComboBox ) وأيضاً إسناد نفس القيمة إلى الـ( ValueMember )

مثال بسيط لشرح الفكرة :

		Dim TB As New DataTable
		TB.Columns.Add("A1")
		TB.Columns.Add("A2")
		For I As Int32 = 0 To 1000
			TB.Rows.Add(New Object() {I.ToString, (1000 - I).ToString})
		Next
		ComboBox1.DataSource = TB
		ComboBox1.DisplayMember = "A1"
		ComboBox1.ValueMember = "A1"
		ComboBox2.DataSource = TB
		ComboBox2.DisplayMember = "A2"
		ComboBox2.ValueMember = "A2"

بالتوفيق :)

تم تعديل هذه المشاركة بواسطة Bashar Rabat في 1 أكتوبر 2009 في 19:03

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#3

السلام عليكم

جزاك الله خيرا اولا

و لكن تلك الجملة

For I As Int32 = 0 To 1000

TB.Rows.Add(New Object() {I.ToString, (1000 - I).ToString})

Next

تطيل فترة التحميل للنموذج و خصوصا كلما زاد عدد الاصناف لانها قد تصل الى 2000 او اكثر

فهل لا يوجد طريقة للربط المباشر دون استخدام تلك الجملة التكرارية

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