الفريق العربي للبرمجةأرشيف المنتديات · 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 او اكثر

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

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

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

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

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

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