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

مشكلة في ربط dataGridView

بدأه dmw في 2 أكتوبر 2013 · 4 رد · 589 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
  • السلام عليكم عملت اثنين من  dataGridView مرتبطين ببعض بحيث اذا اخترت الدولة في الاول يطلع لي المدن في الثاني عالعموم سويتها اشتغلت حلاوة بس واجهت مشكلتين

    1-الدولة الاولى فقط لاتظهر المدن تبعها في dataGridView2 اما باقي الدول فتظهر المدن تبعها

    2- عند اختيار دولة معينة ثم اختيار دولة اخرى لايتم تفريغ مدن الدولة السابقة

    وعندما استخدم هذه الدالة قبل جملة

    dataGridView2.Rows.Clear();

    لايتم عرض المدن بتاتا حتى بعد اختيار الدولة

     
    طبعا هذه الشفرة وضعتها في الحدث dataGridView1_SelectionChanged التابع لل dataGridView الدول
  • int x = dataGridView1.CurrentRow.Index; try { da = new SqlDataAdapter("select no_city,name_city from [city] WHERE [no_country]='" + x + "'", cn); da.Fill(ds, "city"); dataGridView2.DataSource = ds.Tables["city"]; dataGridView2.Columns[0].HeaderText = ""; dataGridView2.Columns[1].HeaderText = "اسماء المدن"; }

    catch { }

     
     
 
 
 
#2

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

 

أرجو إرفاق المثال  

#3

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

أولاً: بالنسبة للدولة الأولى لن تظهر المدن تبعها إلا إذا اخترت دولة أخرى ثم رجعت إليها مرة ثانية، والسبب أن كود ملء الداتاجريد الثانية لا يتم إلا فى الحدث dataGridView1_SelectionChanged لذلك يتوجب عليك كتابة نفس هذه الأكواد فى الحدث Form_Load، وبالطبع هذا يعتبر تكرار للكود لذلك يفضل أن تنقل هذه الأكواد فى وظيفة Method وتسميها أى اسم ثم تستدعيها من الحدثين السابقين

 

ثانياً: بالنسبة لتكرار البيانات أو بمعنى أصح إضافة البيانات إلى بعضها، فذلك يتم فى حالة أنك معرف الداتاست ds على مستوى الكلاس وبالتالى فهى محتفظة بالبيانات القديمة وعندما تنفذ أمر da.Fill فإنه يضيف البيانات إلى الموجودة وخصوصاً أن هيكل البيانات فى كل مرة متشابه فلا يحدث خطأ، والحل هنا أنك تصفر الداتا ست أو الجدول الذى تحتوى عليه ds.Tables["city"].Clear() وذلك قبل استخدام الأمر Fill. والأفضل أن تعرف الداتا ست فى نفس المكان المكتوب به الأكواد السابقة. أما تصفير الداتاجريدفيو نفسها فليس له أى تأثير عندما تعيد ربطها بالداتا ست مرة أخرى، إلا إذا كنت تصفر الداتاجريدفيو بعد ربطها بالداتا ست وبالتالى لن تظهر أى نتائج

 

هناك ملحوظة صغيرة: وهى أنك تستخدم المتغير x للحصول على رقم الصف ثم وضعه فى الشرط Where، هذا خطأ لنه يجب عليك الحصول على رقم الدولة من الخلية التى فى الصف الحالى وليس رقم الصف لأنه لا يشترط أن يكون رقم الدولة مساوياً لرقم الصف التى موجودة به وبالتالى ربما يربط الدولة بمدن دولة أخرى، ويمكنك تجربة ذلك إذا قمت بحذف دولة وليكن رقم 3 من قاعدة البيانات فستجد الدولة رقم 1 و 2 تعمل جيداً أما الدولة رقم 4 ستكون فى الصف رقم 3 وبالتالى سترتبط بالمدن الخاصة بالدولة رقم 3 وهكذا فى كل الدول التالية فربما يكون السطر كالتالى

int x =(int)dataGridView1.CurrentRow.Cells["no_Countrye"].Value

ولا يشترط أن يكون نوعه int فيمكنك جعله حرفى هكذا

string x = dataGridView1.CurrentRow.Cells["no_Country"].value.Tostring()

 

معذرة على الإطالة ولكن لابد من فهم السبب

دعائى للجميع بالتوفيق

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#4

الاخ 

arafat_system

تم وضع المثال في المرفقات

 

الاخ

 

ema2000_t

سويت مثل فكرتك ولكن يتم فقدان رقم الدولة من جدول المدن عشان كذا لايتم جلب البيانات من القاعدة عند تنفيذ الدالة

ds.Tables["city"].Clear() 

لانه جدول الدول والمدن على نفس DataSet

 

بالنسبة للملحوظة حاولت بهذه

string x = dataGridView1.CurrentRow.Cells["no_Country"].value.Tostring()

 

لكن يطلع خطا

عالعموم ارفقت المشروع يوضح الفكرة ياريت المساعدة

example.zip

#5

تم حل المشكلة ولله الحمد شكرا ايها الاخوة على التعاون

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