PDA

View Full Version : سوال: نمایش دیتا در datagridview در معماری چندلایه



arina123
پنج شنبه 07 مرداد 1395, 23:16 عصر
با سلام
من تو برنامه ام از معماری چند لایه استفاده کردم و میخوام داده های یک جدول رو تو دیتاگریدویو در لایه UI بیارم .
با breakpoin برنامه رو اجرا میکنم تا لایه UI دیتا رو میاره و بدون خطا اجرا میشه اما توی گریدویو نمایش نمیده!!
با دستور
dataGridView1.DataSource = Business.Select.SelectGoodrequestbyID(id);
چرا علی رغم آوردن دیتا تا لایه UI توی گریدویو نمایش نمیده؟؟

ژیار رحیمی
جمعه 08 مرداد 1395, 09:59 صبح
دوست گرامی با این خط از کد نمیشه فهمید دلیل چی هست کدهای فرمی که خط بالا رو فراخوانی کردی به اضافه کدهای لایه Businessلازم رو بزار تا بررسی شود

arina123
جمعه 08 مرداد 1395, 10:24 صبح
دوست گرامی با این خط از کد نمیشه فهمید دلیل چی هست کدهای فرمی که خط بالا رو فراخوانی کردی به اضافه کدهای لایه Businessلازم رو بزار تا بررسی شود
با تشکر
لایه DAL


public static Goods_Request SelectGoodRequestBy(int id)
{
return context.Goods_Request.SingleOrDefault(t => t.Code == id);
}

لایه Business


public static Goods_Request SelectGoodrequestbyID(int ID)
{
return DAL.Select.SelectGoodRequestBy(ID);
}


لایه UI


int id = Convert.ToInt32(txtcode.Text);
if (Business.Select.SelectGoodrequestbyID(id)!=null)
{


txtname.Text = Business.Select.SelectGoodrequestbyID(id).Good_Nam e;
dataGridView1.DataSource = Business.Select.SelectGoodrequestbyID(id);

}


توی تکست باکس مقادیر رو نشون میده اما گریدویو رو fill نمیکنه!!

ژیار رحیمی
جمعه 08 مرداد 1395, 12:34 عصر
دوست گرامی روش پیاده سازی الگوی سه لایه شما کارامد نیست.اصولا پیاده سازی الگوی سه لایه در winform منسوخ شده است با توجه به تکنولوژی های LinqToSQL و یا EntityFrameWork پیاده سازی الگوی سه لایه باعث کد نویسی بیشتری خواهد شد.
در کد لایه UI شما سه بار کویری جستجو انجام میشود که منطقی نیست
تابع لایه UI بصورت زیر اصلاح کن ببین به نتیجه میرسی

int id = Convert.ToInt32(txtcode.Text);
var rec=Business.Select.SelectGoodrequestbyID(id);
if (rec!=null)
{
txtname.Text = rec.Good_Name;
dataGridView1.DataSource = rec;
}


بدون معماری سه لایه همین کد لایه UI بصورت زیر خواهد بود

int id = Convert.ToInt32(txtcode.Text);
var rec=context.Goods_Request.SingleOrDefault(t => t.Code == id);;
if (rec!=null)
{
txtname.Text = rec.Good_Name;
dataGridView1.DataSource = rec;
}

شما چه با معماری سه لایه و چه بدون آن همان کد رو در UI مینویسی.

arina123
جمعه 08 مرداد 1395, 12:47 عصر
دوست گرامی روش پیاده سازی الگوی سه لایه شما کارامد نیست.اصولا پیاده سازی الگوی سه لایه در winform منسوخ شده است با توجه به تکنولوژی های LinqToSQL و یا EntityFrameWork پیاده سازی الگوی سه لایه باعث کد نویسی بیشتری خواهد شد.
در کد لایه UI شما سه بار کویری جستجو انجام میشود که منطقی نیست
تابع لایه UI بصورت زیر اصلاح کن ببین به نتیجه میرسی

int id = Convert.ToInt32(txtcode.Text);
var rec=Business.Select.SelectGoodrequestbyID(id);
if (rec!=null)
{
txtname.Text = rec.Good_Name;
dataGridView1.DataSource = rec;
}


شما بدون معماری سه لایه همین کد لایه UI بصورت زیر خواهد بود

int id = Convert.ToInt32(txtcode.Text);
var rec=context.Goods_Request.SingleOrDefault(t => t.Code == id);;
if (rec!=null)
{
txtname.Text = rec.Good_Name;
dataGridView1.DataSource = rec;
}


نه متاسفانه مثل کدخودم تکست باکس رو پر میکنه اما گریدویو رو fill نمیکنه!!
البته ابنکه من سه بارمتد رو فراخوانی کردم کد نهاییم نیست ، فقط برای تست هست تا ببینم چطور جواب میگیرم..

ژیار رحیمی
جمعه 08 مرداد 1395, 12:52 عصر
کد شما مشکلی نداره ببین مشکل از خود دیتاگرید نباشه یه دیتا گرید جدید اضافه کن با اون تست بزن ببین مشکلت حل میشه