PDA

View Full Version : نوشتن یه کامپوننت برای کار با بانک در #C



mahak_f
شنبه 17 فروردین 1387, 09:34 صبح
با سلام.
میخوام برای یک برنامه ،کامپوننتی بنویسم که 4دگمه داره ،کار این دگمه ها اضافه، حذف و

ویرایش بانک اطلاعاتی هست (چون این کارها در همه فرمهای برنامم تکرار میشه) .حالا سوالم

اینه که چنین کاری اصلا شدنیه و اگر جواب مثبته چون در هر فرم باید به جدول متفاوتی

وصل شد، این اطلاعات رو چطور در هر فرم به طور خاص به کامپوننت ارسال کنم؟

hassan razavi
شنبه 17 فروردین 1387, 09:36 صبح
برای هر کدام Connection و Dataset و نام جدول و ....ها یک Propertise ایجاد کنید.

sinpin
شنبه 17 فروردین 1387, 09:40 صبح
با سلام.
میخوام برای یک برنامه ،کامپوننتی بنویسم که 4دگمه داره ،کار این دگمه ها اضافه، حذف و
ویرایش بانک اطلاعاتی هست (چون این کارها در همه فرمهای برنامم تکرار میشه) .حالا سوالم
اینه که چنین کاری اصلا شدنیه و اگر جواب مثبته چون در هر فرم باید به جدول متفاوتی
وصل شد، این اطلاعات رو چطور در هر فرم به طور خاص به کامپوننت ارسال کنم؟

به 1001 دلیل بهتره که منطق dal از ui‌ جدا باشه. پس یک راه مناسب میتونه این باشه که یوزرکنترلتون یک رویداد کلیک عمومی داشته باشه برای زمانی که دکمه ها کلیک میشن ضمن اینکه دکمه ی کلیک شده رو هم به ایونت هندلر برمیگردونه.

سپس در ایونت هندلر کلیک یوزر کنترل با توجه به دکمه ی کلیک شده عملیات لازم روی دیتابیس رو انجام میدید.

mahak_f
شنبه 17 فروردین 1387, 09:46 صبح
میشه خواهش کنم ریزتر برام توضیح بدین؟ راستش من مبتدی هستم و #C رو دارم با نوشتن پروژه یاد میگیرم. اگه مثالی تو این زمبنه بهم نشون بدین میتونم ازش یاد بگیرم

sinpin
شنبه 17 فروردین 1387, 10:11 صبح
میشه خواهش کنم ریزتر برام توضیح بدین؟ راستش من مبتدی هستم و #C رو دارم با نوشتن پروژه یاد میگیرم. اگه مثالی تو این زمبنه بهم نشون بدین میتونم ازش یاد بگیرم

توی این مثال کلاس یوزرکنترل شما سه دکمه داره :

public enum MyButtons
{
NEW, ADD, DELETE
}

[DefaultEvent("Clicked")]
public partial class DataButtons : UserControl
{
public DataButtons()
{
InitializeComponent();
}

public delegate void ClickHandler(object sender, ButtonClickEventArgs e);
public event ClickHandler Clicked;

private void OnClick(MyButtons sender)
{
if (Clicked != null)
Clicked(this, new ButtonClickEventArgs(sender));
}

private void btnNew_Click(object sender, EventArgs e)
{
OnClick(MyButtons.NEW);
}

private void btnAdd_Click(object sender, EventArgs e)
{
OnClick(MyButtons.ADD);
}

private void btnDelete_Click(object sender, EventArgs e)
{
OnClick(MyButtons.DELETE);
}
}

public class ButtonClickEventArgs
{
private MyButtons clickedButton;
public MyButtons ClickedButton
{
get { return clickedButton; }
set { clickedButton=value;}
}

public ButtonClickEventArgs(MyButtons sender)
{
this.clickedButton = sender;
}
}
و نحوه ی استفاده از اون :

private void dataButtons1_Clicked(object sender, ButtonClickEventArgs e)
{
switch (e.ClickedButton)
{
case MyButtons.NEW:
MessageBox.Show("NEW");
break;
case MyButtons.ADD:
MessageBox.Show("ADD");
break;
case MyButtons.DELETE:
MessageBox.Show("DELETE");
break;
default:
break;
}
}

mahak_f
یک شنبه 18 فروردین 1387, 17:40 عصر
دوست عزیز، با مثالی که آوردی متوجه یک قسمت از مطلب شدم. متشکرم.
هدف من نوشتن یوزرکنترلی هست که بتونه با بانک اطلاعاتی (که دربرنامه من Sql Server 2005 هست) ارتباط بگیره و کارهای اضافه کردن به بانک، حذف، ویرایش و ... رو انجام بده. طبق راهنماییتون قسمت تشخیص دکمه ی کلیک شده رو نوشتم و صحیح هم کار میکنه.
حالا با توجه به اینکه تعداد فیلد جدولهای مربوط به هرفرم و اطلاعاتی که از هر فرم باید به جدول پاس داده بشه متفاوته اصلا نوشتن چنین یوزرکنترلی در برنامه مفید هست؟ چون اگه اشتباه نکنم برای پاس دادن نام جدول مورد نظر هر فرم، و هر کدام از Connection و Dataset و نام جدول و ....ها یک Propertise باید نوشته شه!
برای این قسمت کار اگه مثالی دارین لطفا برام بذارین.

razavi_university
یک شنبه 18 فروردین 1387, 23:40 عصر
خب یک کلاس برای کار با پلیگاه داده‌ات بنویس و در هر فرم یک نمونه ازش بساز و با اون کلاس کار کن. البته کاره گرفتن اطلاعات از TextBox ها برای ذخیره در دیتابیست و .. رو خودت باید دستی انجام بدی (چوان برای هر فرمی این اعمال فرق می‌کنه و نمیشه واسه همه یکسان در نظر گرفت)
این همین یک کلاس ساده برای اینکار که کارت رو راه می‌اندازه

در مورد استفاده از این کلاس :
1- NameSapce اون رو به NameSapce برنامه خودت تغییر بده
2- این کلاس ConnectionStringش رو از فایل Setting برنامه می‌گیره

sinpin
دوشنبه 19 فروردین 1387, 03:36 صبح
با توجه به اینکه تعداد فیلد جدولهای مربوط به هرفرم و اطلاعاتی که از هر فرم باید به جدول پاس داده بشه متفاوته اصلا نوشتن چنین یوزرکنترلی در برنامه مفید هست؟
اینکار شما بنوعی تلفیق لایه های ui و dal است که من با اون موافق نیستم.
من خودم کنترلی نظیر آنچه که برای شما نوشتم برای کارهای خودم هم نوشتم و همیشه از اون استفاده میکنم و زمانی که فرضا دکمه ی add کلیک میشه میام و قسمت مربوط به افزودن رکورد در bll رو فراخوانی میکنم که اونم از لایه ی dal کمک میگیره.

mahak_f
سه شنبه 20 فروردین 1387, 11:26 صبح
زمانی که فرضا دکمه ی add کلیک میشه میام و قسمت مربوط به افزودن رکورد در bll رو فراخوانی میکنم که اونم از لایه ی dal کمک میگیره.

میشه خواهش کنم این قسمت رو واسم توضیح بدین؟

sinpin
سه شنبه 20 فروردین 1387, 11:31 صبح
میشه خواهش کنم این قسمت رو واسم توضیح بدین؟
در اینمورد به این تاپیک مراجعه کنید :
پیاده سازی معماری 3 لایه در سی شارپ (http://barnamenevis.org/forum/showthread.php?t=27351)