PDA

View Full Version : سولی درمورد BindingList<T> in .net



Mrs.Net
شنبه 11 اسفند 1386, 19:47 عصر
من یک کلاس از اشخاص ساختم بنام person و یک کلاس از لیست اشخاص بنام Persons داخل کلاس اشخاص پراپرتیهای نام و فامیل و آدرس و اعتبار اضافه کردم.
سوالم اینجا هست که یک پراپرتی میخوام که مقدار اون برابر جمع اعتبارهای اشخاصی است که در Persons اضافه شده اند. این پراپرتی با کم شدن و اضافه شدن اشخاص باید کم و زیاد بشه.
(در مورد عنوان: چون جمله انگلیسی رو بد نشون میداد مجبور شدم in .net اضافه کنم)

Mahdi.Kiani
شنبه 11 اسفند 1386, 20:04 عصر
من یک کلاس از اشخاص ساختم بنام person و یک کلاس از لیست اشخاص بنام Persons داخل کلاس اشخاص پراپرتیهای نام و فامیل و آدرس و اعتبار اضافه کردم.
سوالم اینجا هست که یک پراپرتی میخوام که مقدار اون برابر جمع اعتبارهای اشخاصی است که در Persons اضافه شده اند. این پراپرتی با کم شدن و اضافه شدن اشخاص باید کم و زیاد بشه.
(در مورد عنوان: چون جمله انگلیسی رو بد نشون میداد مجبور شدم in .net اضافه کنم)

خوب طبیعتا بایستی متد هایی برای اضافه و جذف اشخص داشته باشی
یک property به عنوان مثلا totalAccount اضافه کن و در اون متد ها مقادیر مناسب را ست کن

Mrs.Net
شنبه 11 اسفند 1386, 20:14 عصر
ببخشید که سوالم واضح نگفتم.
مشکل من بدست آوردن مقادیر نیست.
مشکلم اینجاست که این پراپرتی نمیشه داخل کلاس اشخاص تعریف کرد چون برای هر شخص نیست.
پس داخل کلاس لیست اشخاص باید تعریف بشه که در این صورت قابل بایند شدن نیست! ولی من میخوام که با کم و زیاد شدن اشخاص در لیست بصورت رانتایم مقدار عوض بشه
امیدوارم فهمیده باشید.
مرسی

Mahdi.Kiani
شنبه 11 اسفند 1386, 20:27 عصر
ببخشید که سوالم واضح نگفتم.
مشکل من بدست آوردن مقادیر نیست.
مشکلم اینجاست که این پراپرتی نمیشه داخل کلاس اشخاص تعریف کرد چون برای هر شخص نیست.
پس داخل کلاس لیست اشخاص باید تعریف بشه که در این صورت قابل بایند شدن نیست! ولی من میخوام که با کم و زیاد شدن اشخاص در لیست بصورت رانتایم مقدار عوض بشه
امیدوارم فهمیده باشید.
مرسی

خوب این مقادیر چگونه باید عوض بشه.. منظورم اینه که اعتبار کلی بر چه اساسی تغییر میکنه؟
من فکر می کنم که پیاده سازیتون شاید ایراد داره
من متوجه نمیشم چطور بعضی از اشخاص اعتبار دارن بعضی ها ندارن؟

اگر چند نوع شخص در برنامتون وجود داره، مثلا دانش آموزان، اساتید، کارمندان و....
می تونین یک کلاس base تعریف کنین واسه نگهداری مشخصات مشترک ، مثلا نام و....
و برای بقیه مشخصات کلاس های مختلف تعریف کنید.

فقط در این صورته که میشه بعضی از اشخاص را از داشتن بعضی خواص محروم کرد و....

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

Mrs.Net
شنبه 11 اسفند 1386, 20:53 عصر
امیدوارم که متوجه بشین:

برای تمام اشخاص یک فیلد credit هست و مقدار دارد.(صفر یا یک رقم)
من یک پراپرتی میخوام که جمع این مقادیر را یکجا نگه دارد مثل TotalCredit

این پراپرتی برای یک شخص خاص نیست.
این پراپرتی برای کلاس -لیست اشخاص- هست. (کلاسی که مجموعه اشخاص در آن قرار میگیرند)

پس: هرگاه شخصی به کلاس -لیست اشخاص- اضافه (یا کم ) شد ==>این پراپرتی مقدارش عوض میشود

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

اگه بازم مفهوم نبود بیشتر توضیح میدم.

Mahdi.Kiani
شنبه 11 اسفند 1386, 23:23 عصر
امیدوارم که متوجه بشین:

برای تمام اشخاص یک فیلد credit هست و مقدار دارد.(صفر یا یک رقم)
من یک پراپرتی میخوام که جمع این مقادیر را یکجا نگه دارد مثل TotalCredit

این پراپرتی برای یک شخص خاص نیست.
این پراپرتی برای کلاس -لیست اشخاص- هست. (کلاسی که مجموعه اشخاص در آن قرار میگیرند)

پس: هرگاه شخصی به کلاس -لیست اشخاص- اضافه (یا کم ) شد ==>این پراپرتی مقدارش عوض میشود

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

اگه بازم مفهوم نبود بیشتر توضیح میدم.

خوب جواب این را در پست دوم دادم
یه نمونه برنامه کوچیک براتون می فریتم صرفا به عنوان نمونه..
اگه باز هم منظورتون چیز دیگه ایه که من متوجه نشدم ، یه رفراندوم برای رساندن مفهوم سوال ایجاد کنید :لبخند::اشتباه:
در برنامه ای که فرستادم، دو نمونه از کلاس Person ایجاد و به کلاس Persons اضافه می شن.
هر person دارای account هست که من در نمونه گیری هر دوی آن هارا 1000 فرض کردم.
ودر یک MessageBox مقدار کل که میشه 2000 را که در فیلد totalAccount درون کلاس Persons ذخیره شده را نشون دادم
یه چیزی مانند این




Person person1 = new Person(1, "mahdi kiani", 1000);
Person person2 = new Person(2, "mrs.net", 1000);

Persons listOfPersons = new Persons();
listOfPersons.Add(person1);
listOfPersons.Add(person2);

MessageBox.Show(string.Format("the total account is {0}",listOfPersons.TotalAccount));




البته نمونه برنامه جای کار خیلی داره..صرفا برای نمونه جهت حل مشکل شما به این شکل نوشته شده
موفق باشید

Mrs.Net
یک شنبه 12 اسفند 1386, 09:36 صبح
پس داخل کلاس لیست اشخاص باید تعریف بشه که در این صورت قابل بایند شدن نیست! ولی من میخوام که با کم و زیاد شدن اشخاص در لیست بصورت رانتایم مقدار عوض بشه
میخوام مقدار بایند بشه به یک کنترل چون میخوام یک لیبل اینکارو انجام بده

sinpin
یک شنبه 12 اسفند 1386, 09:48 صبح
من فکر میکنم پراپرتی رو استاتیک کنید مشکل حل بشه.

Mrs.Net
یک شنبه 12 اسفند 1386, 11:26 صبح
من فکر میکنم پراپرتی رو استاتیک کنید مشکل حل بشه.
استاتیک!!!!!! فکر نمیکنم! (من نمیدونم چرا همچین فکری کردید)

Mahdi.Kiani
یک شنبه 12 اسفند 1386, 11:33 صبح
با اضافه کردن یک Event به برنامه ای که فرستادم میتونی مشکل را حل کنی

یه event بنویس مثلا به نام ChangeAccount و موقع فراخوانی های متد Add و remove ایونت را فایر کن..
می تونی به Delegate مورد نظر یه آرگومان از جنس Account (مثلا decimal) پاس بدی