PDA

View Full Version : كلاسي براي اتصال ComboBox و بانك Sql



Davood_amega
سه شنبه 21 اردیبهشت 1389, 18:35 عصر
من در برنامه ام نمي خوام كاربر را محدود به انتخاب آيتمهاي مشخص ComboBox كنم و مي خواهم هر تغييري( اضافه و حذف آيتمها) در ComboBox در Sql اعمال شود .
به نظر شما بهترين روشي كه آيتمها را در Sql پياده سازي كنم چيست ؟( نياز به Table اضافي هست‌ ؟ )
و به چه صورت ComboBox را به Sql متصل كنم كه آيتمهاي مشخص در ComboBox بيايد؟
آيا مهندسين عزيز همچنين كلاسي مي توانند ايجاد كنند ؟

majid325
چهارشنبه 22 اردیبهشت 1389, 07:55 صبح
http://www.barnamenevis.org/forum/search.php?searchid=2243350

Davood_amega
چهارشنبه 22 اردیبهشت 1389, 09:50 صبح
majid325 عزيز همچنين پستي وجود ندارد . (http://barnamenevis.org/forum/member.php?u=18075)

mehdi.mousavi
چهارشنبه 22 اردیبهشت 1389, 11:14 صبح
من در برنامه ام نمي خوام كاربر را محدود به انتخاب آيتمهاي مشخص ComboBox كنم و مي خواهم هر تغييري( اضافه و حذف آيتمها) در ComboBox در Sql اعمال شود .

سلام.
یعنی هر آیتمی به ComboBox اضافه کردید، به Data Source اضافه بشه؟ (متوجه نمیشم، خوب آیتم رو به Data Source اضافه کنید و سپس ComboBox رو برای اطلاع از این تغییر Refresh کنید).


به نظر شما بهترين روشي كه آيتمها را در Sql پياده سازي كنم چيست ؟( نياز به Table اضافي هست‌ ؟ ) و به چه صورت ComboBox را به Sql متصل كنم كه آيتمهاي مشخص در ComboBox بيايد؟ آيا مهندسين عزيز همچنين كلاسي مي توانند ايجاد كنند ؟

واقعا متوجه نمیشم که سوالتون چیه و میخواهید چه کاری انجام بدید.
لطفا دقیقتر و جزیی تر سوال رو مطرح کنید.

موفق باشید.

Davood_amega
چهارشنبه 22 اردیبهشت 1389, 11:41 صبح
:تشویق: mehdi.mousavi :تشویق: عزيز من در برنامه ام comboBoxهاي دارم كه نياز دارم تغييرات در آيتمهايش در بانكم اعمال شود .
با يه مثال توضيح مي دهم :
مثلا من در بانكم يك شماره شناسايي دارم كه مثلا اين شماره شناسايي ميتونه 3 رنگ را ذخيره كنه ( هر تعداد رنگي ) و فيلدي دارم كه رنگ را نگه مي دارد شماره شناسايي در Tableام كليد است پس من يه Table ديگه بايد داشته باشم كه رنگ را نگه مي داره و ارتباط جداولم 1 به N ميشه .
در برنامه هم يك ComboBox دارم كه رنگها را طبق شماره شناسايي ليست ميكنه .
و اين ComboBox قابليت حذف و اضافه آيتم را دارد و هر تغييري در Table دوم اعمال شود .
و چون تعداد اين ComboBoxها زياده به فكر افتادم كلاسي درست كنم كه همچنين كاري بكنه:اشتباه:
سوالام اينه كه :
1 - ايجاد Table اضافي روش مناسبي ( تنهاترين روش ) است ؟:متفکر:
2- ميشه كلاسي درست كرد كه اين كار را انجام بده ؟ يعني ما يك ComboBox و نام جدول وفيلد مربوطه را به آن بدهيم و تغييرات اعمال شود !:عصبانی++:

mehdi.mousavi
چهارشنبه 22 اردیبهشت 1389, 12:05 عصر
سلام.
خوب، اینکه به دو جدول نیاز داریم که یکی کلید به فیلد اصلی و مشخصات مربوطه رو نگه داره، و دیگری، رنگ های Assign شده به هر کلید رو (که میتونه بیش از یکی باشه)، از دید طراحی بانک درسته. ارتباط هم one-to-many هستش. اینم درست...



1 - ايجاد Table اضافي روش مناسبي ( تنهاترين روش ) است ؟:متفکر:
تنها روش نیست، اما مناسبه. روش دیگه استفاده از یه فیلد XML در همون جدولی هستش که ID رو توش نگهداری می کنید... بدین ترتیب میتونید هر N تا رنگ رو در یه XML Bucket در جدول نگهداری کنید. اما خوب، اینم درد سر های خودش رو داره. روش شما هیچ اشکالی نداره.


2- ميشه كلاسي درست كرد كه اين كار را انجام بده ؟ يعني ما يك ComboBox و نام جدول وفيلد مربوطه را به آن بدهيم و تغييرات اعمال شود !:عصبانی++:

شما در حقیقت باید یه User Control درست کنید و توی اون هر کاری مایل هستید "یک بار" انجام بدید. هر جا خواستید از این User Control استفاده کنید، میتونید اونو به فرم خودتون در جایگاه مناسب قرار بدید و تمام...

گفتم User Control چون طبیعتا باید کنترلهای دیگه ای داشته باشید که کاربر بتونه از طریق اونها آیتمی رو به یک ComboBox اضافه، یا آیتمی رو از ComboBox مورد نظر حذف کنه. در واقع یه Composite Control دارید، به همین دلیل، استفاده از User Control اینجا مناسبه.

موفق باشید.

Davood_amega
چهارشنبه 22 اردیبهشت 1389, 17:12 عصر
خيلي ممنون اما دوتا سوال :
1 - چه جوري بايد فيلد بانك اطلاعاتي و ComboBox را به User Control معرفي كنم ؟( آخه فقط يك Table و يك فيلد نيست:متفکر: احتمال داره تو يك فرم 10 تا ComboBox وجود داشته باشه كه از Table هاي مختلف مقدار مي گيرن :عصبانی++: )
2 - XML Bucket چيه ؟ ( اگر منبعي معرفي كنيد ممنون خواهم شد )

mehdi.mousavi
چهارشنبه 22 اردیبهشت 1389, 17:49 عصر
خيلي ممنون اما دوتا سوال :
1 - چه جوري بايد فيلد بانك اطلاعاتي و ComboBox را به User Control معرفي كنم ؟( آخه فقط يك Table و يك فيلد نيست:متفکر: احتمال داره تو يك فرم 10 تا ComboBox وجود داشته باشه كه از Table هاي مختلف مقدار مي گيرن :عصبانی++: )
2 - XML Bucket چيه ؟ ( اگر منبعي معرفي كنيد ممنون خواهم شد )

اوه. منظورتون از چند تا جدول، اینه که بخواهید جدا از رنگ، خصیصه دیگه ای رو برای اون شناسه نگه دارید؟ مثلا جنس؟ اگر اینطوره، میتونید از یک Type استفاده کنید تا Type اون فیلد رو در جدول دوم بهتون بگه. به بیان دیگه، توی جدول دوم، علاوه بر شناسه اصلی و Value ی اون Property، در واقع Type اون Property رو هم نگهدارید. بدین ترتیب میتونید جدول سومی داشته باشید، که توش Type های مورد نظر شما رو نگهداره. در نتیجه، جدول دوم چیزی شبیه این میشه:

شناسه اصلی از جدول اول، شناسه نوع خصیصه از جدول سوم، مقدار خصیصه

و مثلا:

1، 2، آبی
1، 2، سبز

در حالیکه منظور از 2، "رنگ" هستش.

پاورقی: نمیدونم منظورتون رو درست متوجه شدم یا خیر...

Davood_amega
چهارشنبه 22 اردیبهشت 1389, 18:25 عصر
خيلي ممنون
شما چرا احتمالا من متوجه جوابهاي كه داديد نميشم .
با يه مثال كامل مشكلم را شرح ميدم .
نام جدول : خصوصيت ، خصوصيت ، ...
Table1 : شماره شناسايي ( كليد ) ، نام كالا ، واحد كالا ، تعداد كالا
Table2: شماره شناسايي ، رنگ
Table3 : واحد كالا

ارتباط Table 1 , Table2 : ارتباط 1 به N
واحد كالا Table1 از Table3 پر مي شود .
مثلا :
رنگ هاي شماره شناسايي 1 : قرمز ، سبز ، سفيد
رنگ هاي شماره شناسايي 2 : زرد ، آبي
واحد كالا : عدد ، ليتر ، متر ، رول

1 - حالا وقتي در برنامه من شماره شناسايي 1 را مي زنم ComboBox1 ام مقادير "قرمز ، سبز ، سفيد" را مي گيرد .
2 - ComboBox2 برنامه ام هم عناصر واحد كالا در Table 3 يعني " عدد ، ليتر ، متر ، رول " را مي گيرد .

كاري كه مي خواهم انجام بدم اينه كه :
در ComboBox1‌ مي خواهم مقدار بنفش را نيز اضافه كنم و در Table2 اضافه كنم و همين طور در ComboBox2 مي خواهم رول را حذف كرده و قوطي را اضافه كنم و در Table3 ذخيره كنم .

يه كلاس مي خوام درست كنم كه فيلد رنگ ، Table2 و ComboBox1 را به آن بدهم و خودش اين كار را انجام دهد و يا اينكه فيلد واحد كالا ، Table3 و ComboBox2 را به آن بدهم و خودش اين كار را انجام دهد .

ezamnejad
چهارشنبه 22 اردیبهشت 1389, 22:02 عصر
با سلام
اغلب برای اینکه برنامه محدود نباشه یه سری جدول به نام اطلاعات پایه در نظر میگیرن که اطلاعاتی شبیه به چیزهایی که شما گفتین را میتونه ذخیره کنه . اینطور که شما گفتین اطلاعات مربوط به رنگ و واحد کالا هم متغییر هستند پس بهتره توی جدولهای مجرا باشه تا امکان تغییرش وجود داشته باشه
سوالهایی که مطرح کردید هم تقریبا یک مطلب را میرسونه . در هر صورت شما از کلاس استفاده کنید با نکنید مجبور هستید اطلاعات را در یک فایل متنی یا xml و یا جدولها ذخیره کنید . اگر این اطلاعات را در جدول ذخیره کنید دسترسی به اطلاعات ساده تر خواهد شد و کدنویسی کمتری هم نیاز دارید.

mehdi.mousavi
شنبه 25 اردیبهشت 1389, 10:51 صبح
در ComboBox1‌ مي خواهم مقدار بنفش را نيز اضافه كنم و در Table2 اضافه كنم و همين طور در ComboBox2 مي خواهم رول را حذف كرده و قوطي را اضافه كنم و در Table3 ذخيره كنم . يه كلاس مي خوام درست كنم كه فيلد رنگ ، Table2 و ComboBox1 را به آن بدهم و خودش اين كار را انجام دهد و يا اينكه فيلد واحد كالا ، Table3 و ComboBox2 را به آن بدهم و خودش اين كار را انجام دهد .

سلام.
برای اینکار شما می تونید یه User Control تعریف کنید (چرا میگم User Control؟ چون نیاز به Control های دیگه ای دارید که کاربر بتونه به شما بفهمونه که الان باید فیلد "رول" به فلان ComboBox اضافه بشه، و این کار توسط یک ComboBox میسر نیستش و نیاز به کنترلهای دیگه ای هست. پس وقتی چند کنترل نیاز داریم، یعنی یه Control ترکیبی داریم که بهش میگن Composite Control و کلاس UserControl هر آنچه که ما برای ایجاد یه Composite Control نیاز داریم در اختیارمون قرار میده).

برای این UserControl، دو Property به نامهای FieldName و TableName تعیین میکنیم (می تونید Interface ای تعیین کنید، این دو Property رو روی اون قرار بدید و سپس UserControl شما اون Interface رو پیاده سازی کنه).

هنگام Load یک UserControl، شما میتونید بر اساس این دو Property به جدول و فیلد مورد نظر رجوع کنید و this.comboBox رو با رکوردهای فعلی پر کنید (دقت کنید که بصورت پیش فرض، ComboBox مورد نظر شما در این UserControl وجود داره، به بیان دیگه، وقتی میخوام اطلاعات "واحد"، "رنگ" و ... رو Handle کنم، کافیه تا دو Instance از این UserControl به برنامه ام اضافه کنم و اون دو Property رو برای هر یک Set کنم).

شما توی این UserControl هر کاری که مایل باشید میتونید با داشتن اون دو داده فوق انجام بدید، منظورم Update/Insert کردن رکورد هم هست.

روش دیگه استفاده از Command Pattern هاست. بدین ترتیب که شما ماژولی در برنامه در نظر میگیرید که "فرامین" مورد نظر شما رو اجرا میکنه. این فرامین عبارتند از:


برو از جدول Table2، فیلد رنگ رو بگیر، صعودی مرتب کن و بصورت یک Generic List بهم برگردون.
برو از جدول Table3، فیلد واحد رو بگیر، بصورت یک Generic List بهم برگردون.
برو تو جدول Table3، به فیلد واحد این "رنگ جدید" رو اضافه کن و رکود اضافه شده رو بصورت یه Instance از کلاس Business Logic Object (مثلا) Color بهم برگردون.

بعنوان مثال:

LoadColorsCommand cmd = new LoadColorsCommand(Ascending);
List<Color> colors = cmd.Execute();

و در نهایت ComboBox مورد نظر رو به لیست فوق الذکر Bind می کنید.

شما می تونید هر دو روش رو با هم نیز ترکیب کنید. در واقع جاهایی که میشه بر اساس Command Pattern پیش رفت رو اونطور ببینید، اما UserControl ای هم داشته باشید که کار تکراری Handle کردن اضافه و حذف کردن رکورد به ComboBox رو نیز یکبار در اون انجام بدید.

موفق باشید.

پاورقی: معذرت میخوام دیر پاسخ دادم، یه خرده کارم زیاد بود.