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

comboox ولكن مع ID

مغلق
بدأه jrahma في 5 مارس 2006 · 6 رد · 597 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكنني عرض البيانات في combobox مع الاحتفاظ بقيمة ID مخفية.

مثلاً أريد عرض أسماء الدول بالكامل ولكن القيمة الفعلية للبلد المختار لن تكون Text وإنما اختصار البلد أو كود ISO

أيضاً عندما أعرض أسماء الأشخاص (التي قد يتكرر نفس الإسم أكثر من مرة) فإن القيمة التي أريدها هي Primarykey.

#2

استخدم الـ ValueMember فهى مخصصه لذلك.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#3

هذا هو الكود الذي استخدمه فهل يمكن إضافة ValueMember هنا

 	 VDBConnection.AccessMode  = AccessMode.Remote;
 	 VDBConnection.DataSource     = "127.0.0.1:20211";
 	 VDBConnection.Database       = "shefaDB";
 	 VDBConnection.LoginUser      = "SA";
 	 VDBConnection.LoginPassword  = "";

 	 // fill the nationality and country
 	 VDBAdapter.SelectCommand = new VistaDBCommand("SELECT country_name FROM iso_country ORDER BY country_name", VDBConnection);

 	 DataSet VDBDataset = new DataSet();
 	 VDBDataset.Tables.Add("iso_country"); 
 	 VDBAdapter.Fill(VDBDataset, "iso_country"); 
 	 
 	 //put the data from the dataset into the combobox
 	 DataTable oDataTable = VDBDataset.Tables["iso_country"];
 	 if (oDataTable == null) 
    throw new Exception("BoxCustomers table not found in oCustomersDataSet.");

 	 foreach (DataRow oRow in oDataTable.Rows)
 	 {
    cboNationality.Items.Add(oRow["country_name"]);
    cboCountry.Items.Add(oRow["country_name"]);
 	 }


 	 //the finally clause will tidy up for us.
 	 // cboNationality.SelectedIndex = 0;
 	 cboNationality.Text = "BAHRAIN";
 	 cboCountry.Text = "BAHRAIN";
#4

لأ يا باشا , عندما تريد وضع البيانات في الـ ComboBox استخدم الـ Binding أفضل حتى ترتاح من عملية معرفة الموقع الحالي للبيانات. وحتى يمكنك بسهوله استخدام الـ CurrencyManager والأشياء المتعلقه به.

بعد عمل Fill للـ DataSet , اعمل Bind هكذا للـ ComboBox ::

yourComboBox.DataSource = yourDataSetObject;
yourComboBox.DisplayMember = "2";
yourComboBox.ValueMember = "3";

في السطر الثاني استبدل كلمة 2 بـ اسم الجدول و نقطه ثم اسم العمود الذي تود أن تظهر صفوفه في الـ ComboBox .. مثل "YourTableName.CountryName".

في السطر الثالث استبدل كلمة 3 بـ اسم الجدول ونقطه ثم اسم العمود الـ PrimaryKey مثلا :

"YourTableName.ID".

استخدم ماذكرته في الأعلى لعمل Bind لأى شئ وستجد الأمور تسير على ما يرام.

وبالنسبه للـ TexBoxes وهذه الأشياء البسيطه اعمل لها Bind هكذا :

yourTextBox.DataBindings.Add("Text",yourDatsetobj,"tableName.Colname");

تأكد أيضا أن الـ DataRelations مظبوطه في الـ DataSet اذا كان لديك أكثر من جدول.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#5

أحصل على هذا الخطأ (انظر الكود بعد التغيير)

An unhandled exception of type 'System.ArgumentException' occurred in system.windows.forms.dll

Additional information: Could not bind to the new display member.

والكود هو

 	 VDBConnection.AccessMode  = AccessMode.Remote;
 	 VDBConnection.DataSource     = "127.0.0.1:20211";
 	 VDBConnection.Database       = "shefaDB";
 	 VDBConnection.LoginUser      = "SA";
 	 VDBConnection.LoginPassword  = "";

 	 // fill the nationality and country
 	 VDBAdapter.SelectCommand = new VistaDBCommand("SELECT * FROM iso_country ORDER BY country_name", VDBConnection);
 	 // VDBAdapter.SelectCommand = new VistaDBCommand("SELECT country_name FROM iso_country ORDER BY country_name", VDBConnection);

 	 DataSet VDBDataset = new DataSet();
 	 VDBDataset.Tables.Add("iso_country"); 
 	 VDBAdapter.Fill(VDBDataset, "iso_country"); 
 	 
 	 cboNationality.DataSource = VDBDataset;
 	 cboNationality.DisplayMember = "iso_country.country_name";
 	 cboNationality.ValueMember = "iso_country.country_id";
#6

وينك؟

#7

ما زلت بانتظار الرد عزيزي

وهنا لدي مشكلة

لدي أكثر خمس combobox على نفس الفورم وكل واجد تقرأ بياناتها من table مختلف فهل سيكون الـ binding مبطئاً للفورم؟

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

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