• 0
Esmat_Halfa

ComboBox databindings

سؤال

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

 

مازلت ضيفاً على هذه اللغة الجميلة ولم اتبين بعد ملامحها واما الســــــــــــــؤال :

 

حاليا اتعامل مع الداتابيز باسقاط جدول قاعدة البيانات الى الفورم حيث يتم انشاء tableBindingsSource تلقائيا ومن ثم احفظ واعدل واضيف من خلال اكواد يسيرة كـtableBindingSource.AddNew() وهكذا

ولكن بعض الحقول الرقمية اذا قمت باسقاط جدول على الفورم بعد تحويلها الى Details تمثل بالمكون TextBox ولديه قيم من جدول بيانات ثابته يجب عرضها (--**--) , قمت بتحويل المكون الى ComboBox ثم قمت بايجاد مصدر بيانات اخر للكومبوبوكس هنالك عدة تجارب على غير هدى عملتها ومشاكلها كالتالي

 

- يعرض لك قيمة البيانات (ارقام) وعند اسدال الكومبوبوكس ياتي لك باسماء تلك القيم

- تجده يضيف ارقاما مع الاسماء ولكنه لا يؤثر على محتوى الجدول المناظر

- عندما تختار قيمة معينة من الكومبوبوس تجد الكيرسور لا يتحول عنه لفعل شيء آخر كالضغط على زر الحفظ وخلافه , فلا يمكنك بعد ذلك عمل اي شيء على الفورم الا ان تغلق التطبيق

\

ثم مادور كل من :

 Select Item

Select Value

Tag

Text

الموجودة في (DataBindings) وما دور كل منها

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

كنا في الدلفي نضع 2 داتا سورس احدها بمثابة tabeBindingSource والآخر يسمى ListSource بها keyField والـDisplayField فكيف اتمكن من عمل نفس الشيء من خلال ما سبق من سؤال

 

فائق تقديرنا لكم

 

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

3 إجابة على هذا السؤال .

  • 0

أخي الكريم.

لكي تستفيد من عنصر الـ ComboBox بشكل فعال اعمل التالي:

 

افترض أن لدي كلاس معين اسمه User كالتالي:

    public class User    {        public int Id { get; set; }        public string Name { get; set; }        public string Address { get; set; }  }

الأن قمنا بقراءة مجموعة من Users من أي مزود بيانات كان، الآن سأنشاء مجموعة منها يدوياً واسندها إلى ComboBox:

            List<User> users = new List<User>();            for (int i = 0; i < 10; i++)            {                User user = new User() { Id = i, Name = "Name" + i, Address = "Address" + i };                users.Add(user);            }            comboBox1.DataSource = users;

الآن اذا قمنا بتجربة البرنامج، نجد أن عنصر ComboBox يعرض مجموعة العناصر، ولكن النص المعبر عن كل عنصر عبارة عن إسم الكلاس مع namespace:

الأن عندنا عدة خيارات:

1. إذا أردت عرض Name أو Address الخاص ب User فقط فما عليك سوى تحديد خاصية DisplayMember الخاصة ب ComboBox كالتالي:

comboBox1.DisplayMember = "Name";

أما إذا أردت عرض بيانات أكثر فعليك بعمل override للميثود ToString الخاصة بكلاس User. وبالتالي النص المرجع من هذه الميثود هو ما سيعرض.

  public override string ToString()        {            return string.Format("{0}, {1}, {2}", Id, Name, Address);        } 

لكن إذا أردت استخدام هذه الميثود، عليك بإزلة الخاصية السابقة DisplayMember.

 

الآن إذا أردت عمل حدث معين عند تغيير التحديد من على ComboBox، فعليك بالضغط عليه مرتين ليفتح لك الحدث SelectionIndexChange

الأن ضمن هذا الحدث يمكنك عمل Cast للاوبجكت المحدد وإكمال ما تريد.

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)        {            User user = (User)comboBox1.SelectedItem;            // Do your processing here.        } 

بالتوفيق.

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الاخ الحبيب

Eng.Tareq Jehad

اولاً اشكرك جداً على الاستجابة السريعة , ولكن كما قلت في السؤال انني اريد محاكاة ما كنت افعله في اللغة السابقة في مرحلة التصميم , حتى الآن لا اريد ان اقحم نفسي في كتابة اكواد تخص قواعد البيانات ولكن فقط كما قلت لك اريد عمل كل التهيئات في مرحلة التصميم

 

اشكرك جدً مرة اخرى يا هندسة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالطبع يمكنك استخدام التصميم، 

 

أنا قمت بتوضيح عمل ComboBox كاملاً

 

عليك الآن بعمل databinding من خلال التصميم بدل اسناد list اليه مباشرة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .