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

datagrid and compobox

مغلق
بدأه nos200 في 17 يوليو 2003 · 7 رد · 4,192 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أفيدوني أثابكم الله

أريد أن أضيف من داخل الــــ grid قائمة منسدله بحيث أنني لما أختار منها أسم يتم تسجيل رقمه في قاعدة بيانات

مثل محمد 1

فهد 2

علي 3

وهكذا

ملاحظة

يتم تعبئة القائمة المنسدلة من جدول في قاعدة البيانات

وشكرا لكم

#2

السلام عليكم

هنالك أكثر من طريقة لفعل ذلك (لكن أنا أعرف أسهلها)

الطريقة كالتالي

أولاً لابد أن نصنع comboBox سواءً في الـ design time أو run time

ونقوم بتعريف التالي dataSource = myDataset

ثم كذلك myDataMember = "myTable"

سيكون بهذا الشكل

'Binding comboBox1

ComboBox1.DataSource = Me.DsUp1.Tables("myTable")

ComboBox1.DisplayMember = _

Me.DsUp1.Tables("myTable").Columns("c0").ToString

هذا النوع من التوصيل binding يسمى complex binding كون هذا الـ control يضم أكثر من قيمة في نفس الوقت

و أكثر من خاصية ستكون متصلة مثلاً الـ comboBox

1 - الخاصية dataSource ستكون متصلة بالـ dataset

2 - الخاصية DisplayMember ستكون متصلة بالأسماء التي تود عرضها للمستخدم بلاشك ستكون من عامود في

قاعدة البيانات أنظر في الأعلى كيف يتم ذلك

3 - الخاصية valueMember ستكون متصلة بعامود الأرقام لتخزينها في قاعدة البيانات بدل الأسماء

ثم نقوم بتعديل أرتفاع الـ dataGrid إلى طول أرتفاع الـ comboBox

كذلك سنقوم بضم الـ comboBox في الـ dataGrid بهذا الشكل

'Painting Combo Box

Me.DataGrid1.PreferredRowHeight = Me.ComboBox1.Height

Me.DataGrid1.Controls.Add(Me.ComboBox1)

Me.ComboBox1.Visible = Fals

كذلك قمنا بإخفائها كحالة مبدئية أي في الـ load event بعدها

عند وقع الحدث رسم الـ dataGrid سنقوم بتعديل عرض الـ comboBox ليوافق عرض الـ cell

أي الخانة للـ dataGrid بهذا الشكل

Private Sub DataGrid1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGrid1.Paint

ComboBox1.Width = DataGrid1.GetCurrentCellBounds.Width

End Sub

ثم عند وقع الحدث بعد تغير قيمة الـ cell الحالي سنقوم بالتالي

Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged

With ComboBox1

If DataGrid1.CurrentCell.ColumnNumber = 0 Then

.Visible = False

.Width = 0

.Left = DataGrid1.GetCurrentCellBounds.Left

.Top = DataGrid1.GetCurrentCellBounds.Top

.Text = DataGrid1.Item(DataGrid1.CurrentCell) & ""

.Visible = True

Else

.Visible = False

.Width = 0

End If

End With

End Sub

كتبنا with مع الـ comboBox حتى نختصر إذا ما أردنا أن نكتب خصائصه

الشرط هل الـ cell الذي تم تغيره الآن هو الـ cell الأول

كونها zero based كذلك لابد أن تعلم أن الـ dataGrid ستقوم بجلب

كل الأعمدة من الجدول المتصل بـالـ dataset فيها لذلك لابد أن تحدد في الشرط if

المكان الذي تود أن يظهر الـ comboBox عليه عملية override على

أعتبار أنك حددت المكان فالشرط يقول إذا كان التغير على المكان الذي نود أن نظهر فيه

الـ comboBox هو المكان الذي تم فيه التغير

فهنا يركن الـ comoboBox الذي أرفقناه في الـ dataGrid

لذلك قم بالتالي

قم بإخفائه

أجعل العرض يساوي صفر

ثم المحاذاة من اليسار و الارتفاع

من التنسيق ثم أظهره مرة أخرى لكي يتناسب مكانه مع الـ cells الموجودة في الـ dataGrid

أما إن لم يكن هو الـ cell الأول ذو القيمة الصفر فهذا ليس الـ comboBox

لذلك قم بإخفائه و أجعل العرض يساوي صفر

كذلك إذا تم تحريك المزلاق scroll لـ dataGrid نقوم بإخفاء الـ comboBox

بهذا الشكل

Private Sub DataGrid1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Scroll

Me.ComboBox1.Visible = False

Me.ComboBox1.Width = 0

End Sub

كذلك عن الضغط على الـ dataGrid قم بإخفاء الـ comboBox

بهذا الشكل

Private Sub DataGrid1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Click

Me.ComboBox1.Visible = False

Me.ComboBox1.Width = 0

End Sub

أما عملية التحديث فهذا موضوع أخر ويتحتاج إلى شرح من البداية

إلى عملية التحديث الصحيحة

أرفقت لك ملف مشروح في الـ MSDN فقط غير قيمة الـ connectionString

الى قاعدة البيانات SQL لديك ليعمل المشروع

وقاعدة البيانات في SQL هي Northwind

السلام عليكم

ِ

في المثال يتضح المقال

#3

.

comboboxintodatagrad.zip

في المثال يتضح المقال

#4

ما شاء الله عليك أخي الشهاب الحارق شرح جميل ووافي

بس فيه حاجة الكمبو ده هيظهر اسم في حين أن الجدول المربوط به الجريد يظهر ID إزاي أخلي الجريد تتربط بجدولين علشان واحد يظهر الاسم والتاني يتم حفظ ال ID فيه

ياريت انت أو اي حد من الأخوان يفيدنا

#5

لو سمحتوا ممكن ترفقوا الملف ثاني

مو راضي ينزل

وشاكرين حسن تعاونكم

#6

آآآآه ه ه .... الله يرحم الآكسس بس ,, أنا إيش إلي وراطني

إيش التعقيد هادا .. والله إني تعقدت من VBNET ,,

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#7

السلام عليكم

مشكور اخي الشهاب ولكن الملف في المرفقات لا يعمل اذا ممكن انك ترفعه عشان نستفيد منه

تحياتي

#8

السلام عليكم

عزيزي الموضع هذا قديم للغاية و الملف المرفق على 2002 النسخة 1.0

راجع القسم المخصص لذلك ستجد كثير من المرفقات على 2005 و 2003

السلام عليكم.

في المثال يتضح المقال

هذا الموضوع مغلق.

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