اول اسم فیلدهایی که براشون پراپرتی تعریف میشه میذارن، احتمالا برای خواناتر بودن کده (و از استانداردهاست) نذاشتنش هم مشکلی پیش نمیاره.
ساختار کلی تعریف پراپرتی:
private DataType _var;
public DataType var
{
get{return _var}
[set{_var=value}]
}
Printable View
با سلامنقل قول:
آقا من یه سوال فنی داشتم، کار این "_" چیه؟؟؟ که قبل از بعضی متغییر ها موقع تعریفشون میزارن؟؟؟
در بالا درست اشاره شد و یکی از استاندارد های نام گزاری هست که من خیلی از جاها میبینم که استفاده میشه. ولی برای صرفا استفاده از پراپریتی ها نیست. این نوع نامگزاری رو برای اشیایی استفاده میکنن که به صورت سرتاسری بین یک کلاس تعریف میشن. حالا این اشیا نسب دادن میشن به یک پراپریتی یا اینکه به صورت مستقیم ما ازشون استفاده میکنیم
موفق باشید
سلام
من طراحی سه لایه ، الگوهای طراحی، و این چیزها رو بلد نیستم. شاید حق با شما باشه که اینا نیاز خیلی از برنامه نویس هاست، اما این تاپیک و مطالبی که آموزش داده میشه برای من و کسای دیگه که مثل من برنامه نویس مبتدی هستن اهمیت خاص خودشو داره. لطفا سطح مطالب رو خیلی بالا نبرید تا ما مبتدی ها هم متوجه بشیم.
آقای gwbasic به خاطر زحمتی که می کشید تشکر میکنم و امیدوارم آموزش ها ادامه داشته باشه! :)
توی تاپیک اصلی من فاز بندی های این پروژه رو مشخص کردم البته هیچ دلیلی وجود نداره طبق اون عمل بشه و می تونه این روند تغییر کنه.
من در فاز اول سعی می کنم که روش کدنویسی پشت فرم ها رو آموزش بدم که چطور موجودیت ها پشت فرم تعریف بشه و به کنترل های فرم ارتباط داده بشه و در نهایت منطق برنامه با کنترل های فرم بطور مستقیم گره نخوره. مخاطب این فاز هم قطعا افراد مبتدی و کم تجربه هستند.
در نتیجه در مورد چند لایه نویسی کمی صبر کنید تا این فاز تموم شود.
اما اینکه چطور چند لایه نویسی بر اساس EntityFramework پیاده سازی شود من فکر میکنم راه بهتر پیاده سازی بر اساس CodeFirst هست در نتیجه نیاز به آشنایی با این مفهوم در EF هست بنابراین یک سری مقدمات هست که باید آموزش داده بشه
البته مشتاقم نظر شما رو در این زمینه بدونم شاید راه ساده تری رو داشته باشید.
دوستانی که علاقمند به ادامه این آموزش هستند لطفا کمی همکاری کنند من واقعا نمی دونم این آموزشها مفید هستند یا نه و یا اینکه اگه روش آموزش ایراد داره پیشنهاد بدن.
آقای مدیر gwbasic برای من آموزشهایت خیلی خیلی مهم هستند همینجور که میدونید من از اول این تاپیک دارم با شما گام به گام میام جلو و اگر این تاپیک را ادامه ندید واقعا دلسرد میشم برای من مفیدن من هم دارم همراه شما میام که معماری 3 لایه برسم ... پروژه من باید تحت 3 لایه ایجاد بشه و هر چه زودتر به لایه ها و مفاهیم ان برسم برام بهتره از این رو هر وقت هم فرصت بکنم دارم پی دی اف خانم julia lerman را نیز مطالعه میکنم اما متاسفانه زبان انگلیسیم زیاد قوی نیست و هر خطش برای درکش نیاز به یکی، 2 ساعت وقت دارم :ناراحت: با این حال تصمیم با شماست ... اکثر پروژهای تا حالا من کار کردم نرم افزارهای مدیریتی بوده و تحت ویندوز و اس کیو ال بنابراین به روشها و کدهای بهینه برای برنامه نویسی پیشرفته نیاز دارم ... باز از زحمات شما ممنونم
سلام به همه ی دوستای خوبم
اول میخواستم یه توضیح مختصر راجب این خصوصیت ها بدم بهتون که امییدوارم مفید باشن :
نکته 2 : غیرفعال کردن دیتاگرید در زمان ویرایش پس از یکبار کلیلک. که برای من جالب بودنقل قول:
خصوصیات در اصل حالتی هستند که مکانیزمی انعطاف پذیر برای خواندن ، نوشتن یا محاسبه ی مقادیری از فیلدهای اختصاصی(private fields) ؛ هستند
این خصوصیت ها می توانند بعنوان اعضای دیتای عمومی مورد استفاده قرار بگیرند، اما درواقع اونها شامل متدهای خاصی بنام (accessors) هستند که باعث میشوند دیتاها براحتی فابل دسترسی باشند در زمانی که ما متدهای قابل انعطاف و امن تولید میکنیم.
این خوصیات به کلاس ما این توانایی را میدهد که مقادیر قابل تنظیم(set) و مقادیر گرفته شده (get) که بصورت خصوصی(private) در کلاس تعریف شدند در معرض تماشا قرار دهد و قابل دسترسی کند.
دستور (get) برای این است که ارزش ان مقدار را برگرداند و دستور (set) برای برای تنظیم مقدار جدید این خصوصیت تعریف میشود
این سطح دسترسی می تواند در سطوح مختلف تعریف شوند
کلمه کلیدی valueبرای این است که در دستور (set)مقداری برای ان اختصاص داده است.
خصوصیاتی که شامل دستور set نیستند , فقط خواندنی هستند.
(گت) یک متذ قابل دسترسی را در خصوصیت یا ایندکسر مت تعریف میکنه که مقدار value را برمیگردونه
class TimePeriod
{
private double _seconds;
public double Seconds
{
get { return _seconds; }
set { _seconds = value; }
}
}
(ست)برای تعیین مفدار قابل نمایش در ان خصوصیت و اعمال یک سری شرایط بر روی ان
public double Hours
{
get { return seconds / 3600; }
set { seconds = value * 3600; }
}
(ولیو)
ارزش کلمه کلیدی متنی در Set ارسال در تعریف خصوصیات معمولی مورد استفاده قرار می گیرد. این شبیه به یک پارامتر ورودی در یک روش است.
private string name;
// Override auto-implemented property with ordinary property
// to provide specialized accessor behavior.
public override string Name
{
get
{
return name;
}
set
{
if (value != String.Empty)
{
name = value;
}
else
{
name = "Unknown";
}
}
}
نکته 3 : متدهایی که برای فعال یا غیر فعال کردن یکسری از ابزارهای روی فرم ؛ به جای اینکه برنامه نویس در رویداد کلیک دکمه ها بخواهد هربار اینها را بنویسد تنها متد مربوطه را صدا بزند
نکته 4 : نوشتن یک شرط باحال برای اینکه حالت صحیح یا غلط را برگردونه که من اینو بلد نبودم
tsbEdit.Enable=tsbDelete.Enable=bsProduct.count>0;
که در اینجا اگر حالت اخری جواب صحیح برگردونه پس کلا True میشن در غیر اینصورت False
دوستان و استادادن عزیز واقعا ممنون..من با توجه به اینکه وقتم کمه و زیاد همحرفه ای نیستم که بتونم تو بحثاتون شکت کنم اما هرجور شده سعی میکنم هر روز به این تاپیک سر بزنم...خواستم تشکری کنم و همچنین یه سوال درمورد اینکه کسی کلا درمورد handle میتونه به من توضیح بده؟؟
کلا مفهومش چیه؟؟؟؟
یه سوال دیگه اینکه آیا توی پروژه های خیلی بزرگ هم از entity framework استفاده میکنند یا نه؟
کدوم handle اگه منظورتون handle فرم هست مطلب خاصی نیست وقتی فرمی در سیستم عامل نمایش داده می شه به اون فرم یک handle اختصاص داده می شه ولی ما هنگام کد نویسی معمولا نیاز به این نداریم که از handle استفاده کنیم. handle معمولا هنگام برنامه نویسی از طریق api استفاده می شه. در کل چیزی نیست که زیاد فکرتون رو مشغولش کنید.
در مورد EF باید بگم که بله حتما می شه در پروژه های بزرگ استفاده کرد. EF برای راحتی و ارتباط object Oreinted با پایگاه داده آمده.
سلام من تازه با این تاپیک آشنا شدم.همین که دیدم بحث طراحی سه لایه ، الگوهای طراحی و... اینا هست و مثل اینکه میخواد تازه شروع بشه خواستم نظرم و بگم.واقعا این مطالب خیلی تو نت کمیاب هستن.و کمتر کسایی نخصص دارن.
من با نظر شما موافق نیستم چون مطالب مبتدی هرجا که بخوایین پیدا میشه.اما این جور مطالب که سطحشون بالاست کمیابه
اگه میشه جناب gwbasic بحث و آموزش رو در این ضمینه ادامه بدین تابتنیم بیشتر استفاده کنیم.
موفق باشین
سلام
من برنامه رو طبق آموزش ها ساختم اما زمانیکه روی دکمه ی save کلیک برای بار اول اطلاعات رو ذخیره میکنه اما برای بار دوم خطا میده و از برنامه میاد بیرون.
برنامه رو گذاشتم
اگه امکانش هست منو راهنمایی کنید
ممنون
رمز فایل هم 123321
http://up7.iranblog.com/images/ak9xbuv9eyyu13puggg3.rar
اگه ویدیو اول رو بدقت دیده باشید من این مورد رو توضیح دادم. این مسئله باگ ویژوال استودیو هست. وقتی شما در Edm Designer روی یک Entity کلیک کرده و Id رو انتخاب کنید. در پنجره پراپرتی StoreGeneratedPattern = Identity قرار بدید هنگام تولید تگ این مورد لحاظ نمی شه که در سرویس پک یک این مسئله برطرف شده. برای حل اون هم همانطور که در ویدیو اشاره شد باید این مورد رو خودتون به صورت دستی اضافه کنید.
درضمن یادتون باشه که اگه Entity جدیدی اضافه کردین و یا update انجام دادین باز این مسئله پیش میاد که باید دوباره دستی این کارو انجام بدین البته جای نگرانی نیست چون همونطور که گفتم در سرویس پک یک ویژوال استودیو حل شده.
به همه دوستان پیشنهاد می کنم این آموزش ها رو چندین بار ببینین و حتما تموم کدها رو خودتون بنویسین تا کامل جا بیافته چون دوستانی که کداشونو به من نشون میدن (حالا اسمشونو نمی گم :چشمک:) باز هم به روش خودشون کد می نویسن
بابت دیر شدن آموزش های بعدی از همه عذر خواهی می کنم چون مطالب ویدیو بعدی که ساخت فرم سفارش هست خیلی زیاده و هنوز نتونستم به طور کامل جمع و جور کنم
سلام
من بعد از مدت ها اخر تونستم بیام اینجا ( اما خیلی سوت و کور شده که باید از این وضعیت در بیاد)
من یه سوال واسم پیش امده؟؟؟؟؟
کلا این Binding source کارش چی هست؟
واسه چی هست؟
ماهیتش چیه؟ یعنی چه جنسیه؟ یعنی کلاسه ؟ جدوله؟ ...؟ کلا یکی این رو میشه واسه من یاز کنه که دقیقا Binding source کارش چیه؟
دیگه کجاها به درد میخوره ؟
فواید و نواقصش چیه؟
اییییییی بابا چقدر سوال داشتم ؟؟؟؟؟ تراخدا یکی این کلاف پیچ در پیچ Binding source را واسم باز کنه ؟؟؟:متعجب::متفکر::لبخند::عصب نی++:
از bindingsource ایا می شود به روش معماری 3 لایه استفاده کرد ؟ آقای مدیر آموزش جدید ؟
در مورد BindingSource هم توی پروِژه به صورت ویدیویی آموزش دادم که چه کار می کنه و هم توی امضام لینک "آموزش Data Binding" رو گذاشتم که توی اون تاپیک کامل توضیح دادم که Data Binding چی هست و چطور از BindingSource برای Binding استفاده می کنیم. نمی دونم چرا سوال می کنید؟!
کلا binding ارتباطی رو بین کنترل و موجودیت برقرار می کنه. چرا نشه توی معماری چند لایه ازش استفاده کرد. شما موجودیتتون رو از لایه Data Accessمی گیرید و با استفاده از binding به کنترل های فرم وصل می کنید.
برای آموزش بعدی شاید حدود 40 50 ساعت فقط وقت صرف کد نویسی کردم. و تازه همین الان که دارم این پست رو می زنم تموم شده! در ادامه نیاز هست که معماری Entity Framework رو خوب بدونید حداقل اینکه Object Context رو خوب بشناسید و بدونید که چطوری چند OC داشته باشید و Entity ها رو بین اونها جابجا کنید. در ادامه تکنیک هایی که استفاده می شه بخصوص در معماری چند لایه خیلی قابل استفاده هستند. و دونستنشون مهم هست.
امیدوارم امشب بتونم ویدیو رو هم آماده کنم
در تاپيک اصلي آموزش ساخت فرم سفارش رو گذاشتم. اميدوارم با اين آموزش به ارزش Entity Framework پي ببريد که چطور مي شه با استفاده از آن به صورت شي گرا با Database ارتباط بر قرار کرد و وظيفه ذخيره تغييرات رو به عهده EF گذاشت. همچنين اميدوارم نحوه ارتباط برقرار کردن بين چند فرم رو ببينيد و استفاده کنيد.
پيشنهاد مي کنم اين آموزش رو چندين بار ببينيد و مهمتر از اين سعي کنيد با سليقه خودتون کدنويسي کنيد و فرم سفارش رو بسازيد تا بيشتر با EF آشنا بشين و با خطاهاي احتمالي مواجه بشين تا کارکردن با ObjectContext برایتان جا بیافتد!!!
ممنونم اقای مدیر بابت زحماتی که کشیدی به زودی کدهای خودم را میگذارم تا نظر بدین
این تاپیک را یک جوری همیشه در صفحه اول قرار دهید ، چون مشکل خیلی با خواندن این حل می شود
پیشنهاد خوبی هست. تاپیک اصلی آموزش رو اعلان کردم تا براحتی در دسترس باشه امیدوارم مورد استفاده قرار بگیره!
تا کسی خودش نخواد و تلاش نکنه مطمئنا پیشرفتی حاصل نمی شه. امیدوارم کسانیکه این آموزش ها رو دانلود می کنن دنبال آرشیو درست کردن نباشن که یه زمانی اگه وقت پیدا کردن ببینن. مطمئن باشن که اون وقت هیچ زمانی نمی رسه. پس بهتره در اولین فرصت شروع کنن و دست به کار بشن هرچی رو که یاد می گیرن بنویسن و تلاش کنن تا یاد بگیرن این مطالب حاصل سالها تجربس که در اختیار شما قرار می گیره چیزی نیست که توی کتابا بتونین به این سادگی دنبالش بگردین...
موفق باشین
سلام
آموزش سوم خیلی سخت بود و هم خیلی عالی خیلی چیزا فهمیدم و خیلی چیزا را یاد نگرفتم
کدها را مانند کدهای آقای مدیر سعی کردم بنویسم اما باز مشکل داشتم
در قسمت طراحی بانک اگر به اشتباه فیلدی را تعریف کرده و می خواهم تغییرات اعمال کنیم دوباره و ذخیره کنیم با پیغام ذخیره ای روبه رو می شویم که savetext داره حتما متوجه شدید کدام پیغامه اون را داخل sql server 2008 یک تیک داشت که بر میداشتی دیگه این پیغام نمیاد اما از داخل داخل ویژوال استودیو نمیدونم به چه طریق ؟
2. دومین مشکل من سر همین Attach و Detach خیلی سخته تا مفهوم درک کنم شاید به دلیل اینه که من از ساختار struct درک درستی ندارم همچنین این get و set همیشه استفاده میکنم اما هیچ موقعه نفهمیدم چی هستند :قهقهه:
بالاخره من این تاپیک را حسابی دنبال میکنم تا یاد بگیرم
کدهای خودم را گذاشتم و در فرم مشتری یک جستجو هم گذاشتم که از دستورات linq استفاده کرده ام به چند طریق جستجو با دستورات و نام خانوادگی مشتری
و اما فرم سفارش
1. دیتا گرید به bsorderdetails متصل کردم اما productName نیامد تو ستون های گرید؟
2. اخرش تو قسمت AddProductToCurrentOrderDetail به مشکل بر خوردم که نفهمیدم چه کنم
اینهم کدهای من : امیدوارم نظر بدهید و مشکلات من را توضیح بدهید
http://s2.picofile.com/file/7242996020/Store1.rar.html
یه سوال از استادان بزرگوتر.....
من درمورد entity Framework دارم کتاب آقای راد رو میخونم
میخواستم ببینم کدوم روش رو اجرا کنم؟
Database First یا Model First?
به نظر خودم که model First خیلی روش بهتریه چون اول مدلت رو تعریف میکنی و تمام طراحیاتو انجام میدی و بعدش خودش برات بانک رو طراحی میکنه
اما گفتم شاید این روش برای پروژه های بزرگ جواب نده
میخواستم استادای عزیز تجربه هاشون رو کامل در اینمورد به ما هم منتقل کنند
و باز هم سپاس فراوان
هنگامیکه تغییری روی ساختار جداول Local Database تون می دین ویا موارد مشابه بطور پیش فرض VS اجازه نمی ده ذخیره بشه برای اینکه VS از ذخیره جلوگیزی نکنه باید تیک مورد زیر را بر دارید:
Tools->Options->Prevent saving changes that require table re-creation
وقتی موجودیتی در objectContex قرار دارد OC هوشمندانه تغییرات آن را متوجه شده و با SaveChanges در DB ذخیره می کند. Attach موجودیتی رو به Context اضافه می کند و Detach خارج می کند. برای کار با EF حتما باید مفاهیم رو خوب بلد باشید (کتاب بخونید) احتمالا در آبنده به آموزش EF خواهم پرداختنقل قول:
2. دومین مشکل من سر همین Attach و Detach خیلی سخته تا مفهوم درک کنم شاید به دلیل اینه که من از ساختار struct درک درستی ندارم همچنین این get و set همیشه استفاده میکنم اما هیچ موقعه نفهمیدم چی هستند :قهقهه:
ستون را به چی Bind کردید چک کنید متوجه می شید!!!نقل قول:
1. دیتا گرید به bsorderdetails متصل کردم اما productName نیامد تو ستون های گرید؟
چه مشکلی؟نقل قول:
2. اخرش تو قسمت AddProductToCurrentOrderDetail به مشکل بر خوردم که نفهمیدم چه کنم
این دو مورد به لحاظ کار با DataBase فرقی نمی کنند. مطمئن باشید برای پروِژه های بزرگ جواب می ده وگرنه من و امثال من هیچ وقت وقتمون رو صرفش نمی کردیم
به نظر من Code Firstنقل قول:
میخواستم ببینم کدوم روش رو اجرا کنم؟
Database First یا Model First?
من کلا قسمت دیتا سورس دیتا گرید را به bsOrderDetails قرار داده ام و خود bsOrderdetail قسمت دیتا سورس را به models.orderDetails داده ام ولی ستون prodoctname نداشتنقل قول:
ستون را به چی Bind کردید چک کنید متوجه می شید!!!
این هم مشکل که کدها و خطا در یک فایل تکست زمینه کردم :نقل قول:
. اخرش تو قسمت AddProductToCurrentOrderDetail به مشکل بر خوردم که نفهمیدم چه کنم
ضمیمه 80610
کل کدها و فایلها در لینک قبلی من هستش که منتظرم ببینم کجا و تو چه کدهای اشتباه کردهام یا بهتر کدها را به چه طریق بنویسم؟
کتاب چی بخونم یک کتاب معرفی کنید ؟
با تشکر از مدیر محترم
از یه برنامه نویس توقع می ره که بتونه دیباگ کنه و مشکلو پیدا کنه! بیشتر سعی کن
کتاب Appress.Pro.Entity.Framework.4.0 رو می تونی بخونی حجمش خیلی کمه
خیلی دید زدم متوجه خطام نمیشم ؟:اشتباه:
من کدتو دیدم توی اون قسمت مشکلی نداشت!!! به هر صورت بعد از آموزش بعدی کد رو خواهم گذاشت میتونی مقایسه کنی
با سلام خدمت جناب gwbasic
من یک کوئری با linq نوشتم و مقدار اون و به دیتا سورس dgv پاس کردم ولی در این حالت متد autosort در dgv که بصورت پیش فرض در dgv قرار دارد غیر فعال می شود می خواستم بدونم چطور می تونم با تغییر در نوع کوئری این مشکل رو حل کنم مثلا تبدیل کوئری به دیتاتیبل
البته این مشکل رو من در یک تاپیک جدا هم نقل کردم در صورت اضافه بودن حذف نمائید
اگر کلاسی تعریف کرده (مثلا Person) و لیستی از این کلاس ایجاد کنیم و آن را به DataGridView مان Bind کنیم بدلیل اینکه این لیست قابلیت Sorting را بطور پیش فرض ندارد بنابراین Sort گرید هم (از طریق کلیک کردن روی عنوان ستون) عمل نخواهد کرد. برای حل این مسئله دو راه وجود دارد (و شاید بیشتر) یکی اینکه BindingList خاص تعریف کنیم با قابلیت Sorting که کمی پیچیده هست و راه دیگر که راه ساده تری هست خودمان رویداد ColumnHeaderMouseClick مربوط به DataGridView را هندل کنیم:
private void myDataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridViewColumn column = myDataGridView.Columns[e.ColumnIndex];
_isSortAscending = (_sortColumn == null || _isSortAscending == false);
string direction = _isSortAscending ? "ASC" : "DESC";
myBindingSource.DataSource = _context.MyEntities.OrderBy(
string.Format("it.{0} {1}", column.DataPropertyName, direction)).ToList();
if (_sortColumn != null) _sortColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
column.HeaderCell.SortGlyphDirection = _isSortAscending ? SortOrder.Ascending : SortOrder.Descending;
_sortColumn = column;
}
منبع
با سلام
من کد شما رو چک کردم ولی نتونستم ازش استفاده کنم میشه یکم در باره _sortColumn توضیح بدهید که کجا ایجاد می شود و از کجا خوانده می شود این sortColumn_ همانند column می باشد یعنی همان سلول کلیک شده در هدر ان جهت عملیات sort است
من یک نوع column در بیرون و در داخل از متد ایجاد کردم که در هر دو حالت جواب نگرفتم و فقط شکل عملیات sort در هدر سلول تغییر می کرد
در مورد پاس کردن query که sort شده بوسیله بایندینگ است ایا باید بعد از این عمل دوباره دیتا را در dgv لود کنیم یا خود بایندینگ این عمل رو انجام می دهد
ممنون می شوم یک کم راهنمای فرمایید
bool _isSortAscending = false;
DataGridViewColumn _sortColumn;
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridViewColumn column = dataGridView1.Columns[e.ColumnIndex];
_isSortAscending = (_sortColumn == null || _isSortAscending == false);
string direction = _isSortAscending ? "ASC" : "DESC";
bindingSource1.DataSource = db.part.OrderBy(
string.Format("it.{0} {1}", column.DataPropertyName, direction)).ToList();
if (_sortColumn != null) _sortColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
column.HeaderCell.SortGlyphDirection = _isSortAscending ? SortOrder.Ascending : SortOrder.Descending;
_sortColumn = column;
}
siepoldEntities db = new siepoldEntities();
private void button1_Click(object sender, EventArgs e)
{
var query = from p in db.part
select p;
bindingSource1.DataSource = query.ToList();
dataGridView1.DataSource = bindingSource1.DataSource;
}
سلام بر همه دوستان
من یه مشگلی که دارم اینه که پروژه هر کی و اجرا می کنم این خطا رو بهم میده.
The underlying provider failed on Open.
امکان راهنمایی هست؟
همیشه وقتی Exception ای اتفاق میافته از پنجره باز شده روی View Details کلیک کنید و Inner Exception رو بررسی کنید تا جزئیات بیشتری از خطا رو ببینید. در صورتیکه در Message مربوط به InnerException خطای A network-related or ... رو می بینید به احتمال زیاد سروسی SQL شما Stop هست و باید آن را Start کنید. روی Start کلیک کرده Run را باز کنید و Services.msc را تایپ کنید در پنجره باز شده SQLExpress را انتخاب کرده و Start کنید
با سلام
استاد خیلی دنبال حل مشکل گشتم ولی تو تمام فرومها این مشکل همینطور پا برجا بود می تونم با ساختن یک datatable و ریختن اطلاعات کوئری بصورت رکورد به رکورد داخل آن بوسیله foreach مشکل رو حل کنم ولی مقداری افت زمانی دارم که البته تا زیر 20الی 30 هزار رکورد قابل ملاحظه در شبکه معمولی نیست ولی بالاتر از اون یکم خودش رو نشون می دهد در روش شما هم هر بار برای sort یک کوئری اجرا مکنه و نتیجه رو به بایندینگ پاس می کنه آیا روش من اصولی بنظر می رسه یا نه
در linq to sql شما در متد کوئری خودتون یک query.copytodatatable دارید و این خیلی راحت این مشکل رو حل می کنه ولی در linq to entity وجود ندارد
خواهشا راهنمایی فرمائید
30 هزار رکورد رقم کوچکی برای unit test می باشد در ضمن موقعی که با ارقام زیاد اطلاعات کار می کنی این رقم ها خیلی کوچیکه بعضی وقتها پیش میاد نیاز به لود این حجم اطلاعات جهت گزارشات و محاسبه داری ولی اولویت در لود اطلاعات جهت کاربر همیشه در paging می باشدنقل قول:
30 هزارتا رکورد را لود می کنی میگذاری جلوی کاربر ننه مرده که باحاش چی کار کنه؟
استاد راهنمایی نفرمودید
در مورد sort کردن داده پشت DataGridView در درجه اول داده هاتون رو از DB خوانده و در لیست قرار می دهید و در سپس لیست رو به BindingSource و در نهایت BindingSource رو به DGV بایند می کنید
برای Sortهم طبق پست قبلی عمل می کنید منتها اون لیست را Sort می کنید (بدیهی هست که نباید دیتا رو دوباره مرتب شده از DB گرفت) البته مرتب کردن لیست چند روش داره که یکیش به صورت زیر هست:
private bool _isSortAscending;
private DataGridViewColumn _sortColumn;
private void dgvCustomer_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridViewColumn column = dgvCustomer.Columns[e.ColumnIndex];
_isSortAscending = (_sortColumn == null || _isSortAscending == false);
string direction = _isSortAscending ? "ASC" : "DESC";
if(_isSortAscending)
CustomerBS.DataSource = Customers.OrderBy(c => c.GetType().GetProperty(column.DataPropertyName).G etValue(c, null));
else
CustomerBS.DataSource = Customers.OrderByDescending(c => c.GetType().GetProperty(column.DataPropertyName).G etValue(c, null));
if (_sortColumn != null) _sortColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
column.HeaderCell.SortGlyphDirection = _isSortAscending ? SortOrder.Ascending : SortOrder.Descending;
_sortColumn = column;
}
من سر نخ رو بهتون دادم باقیش دیگه با خودتون بود که دقیقا نیازتون رو براورده کنید!!!
در مورد داده های زیاد هم منطقی نیست که کل داده ها رو بخواهید در گرید نمایش بده کاربر نیازی به این همه دیتا نداره! نمی تونه استفاده درستی از داده ها به این شکل ببره. برحسب نیاز می تونید داده ها رو مثلا 100 تا 100 تا به Load کنید Linq این امکانو با استفاده از Skip و Take می ده و یا اینکه امکان جستجو در فرم رو به کاربر بدید که بر اساس یکسری فیلد ها که کاربر پر می کنه داده ها از DBخوانده بشه.
امیدوارم جوابتون رو گرفته باشید و اجازه بدید تاپیک روند خودشو طی کنه
موفق باشید
با سلام خدمت استاد گرامی
از راهنمایی شما بی نهایت سپاسگزارم . اما با اینکه sqlexpress رو هم start کردم بازم به متد savechanges خطایی میده که innerException آن
An error occurred while preparing the command definition. است.
بازم به خاطر زحماتتون ممنون
سلام
من برنامه رو بر اساس آموزش ها نوشتم و خطایی هم نمیده اما وقتی اطلاعات ذخیره میکنم در مراجعه بعدی به برنامه یا اطلاعات پاک شده و یا بعد از چند بار ورود و خروج پاک میشن.بعد از ریست کامپیوتر هم همین اتفاق میفته.
علتش چیه؟
ممنون
منم همین مشکل را داشتم این بر میگرده به ویرایش کد که با هر بار ویرایش کد ویژوال استودیو بانک را ریفرش میکنه اگر می خواهی این مشکل حل بشه باید داخل فایل app محل قرار گرفتن بانک را در Connectionstring به ادرس محل پروزه تغییر بدید .. البته بعد از اتمام کامل پروژه باید دوباره این آدرس را به حالت اول بر گردانی وگرنه پروژه کار نمیکنه الان باید ادرس تقریبا به این حالت باشه داخل فایل app :
<add name="StoreDBEntities" connectionString="metadata=res://*/StoreModels.csdl|res://*/StoreModels.ssdl|res://*/StoreModels.msl;provider=System.Data.SqlClient;pro vider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\StoreDB.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
من تغییرش دادم به این :
<add name="StoreDBEntities" connectionString="metadata=res://*/StoreModels.csdl|res://*/StoreModels.ssdl|res://*/StoreModels.msl;provider=System.Data.SqlClient;pro vider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Store\Stor eDB.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
حالا مشکل حذف رکوردهای که برای تست ایجاد کردم ندارم و در نهایت که پروژه کامل شد ان را به صورت اول بر میگردانم اگر اینکار انجام نشود کل پروژه بهم میریزه
چند پست قبل هم آقای مدیر توضیح داده اند می تونی بر گردی ببینید