PDA

View Full Version : ایجاد خاصیت relationship بین دو List



Mrs.Net
چهارشنبه 09 مرداد 1387, 11:00 صبح
چندتا کلاس از نوع List<> دارم و میخوام بین فیلدهای اونها خاصیت relationship ایجاد کنم.

Mrs.Net
یک شنبه 13 مرداد 1387, 10:24 صبح
سوالم اشتباه بود یا کسی نمیدونه؟

سار
یک شنبه 13 مرداد 1387, 10:42 صبح
برای من مفهوم نبود، ممکنه با مثال توضیح بدی؟

Mrs.Net
یک شنبه 13 مرداد 1387, 11:04 صبح
Class A{
properties: Code, Name, Address
}

class B{
properties: Code, Title, Amount
}

List<A> lista=new List<A>();
List<B> lista=new List<B>();

load A, B from database

make relation between lista and listb with Code



دوتا کلاس داریم با فیلدهای بالا
لیستی از این دوتا کلاس درست میکنیم و از بانکمون پر میکنیم.
دوتا لیست به دو تا دیتاگریدویو بایند میکنم
حالا میخوام بین این دوتا لیست بر اساس پراپرتیز کد یک ریلیشن بسازم
که با حرکت روی یکی اون یکی هم تغییر کنه.
حتی میشه از کنترلهای بیندیگ لیست هم استفاده کرد اما چجوری؟

naeeme
یک شنبه 13 مرداد 1387, 11:04 صبح
یعنی می خواین مثل DB عمل کنه. یه پراپرتی در A باشه که کلید خارجی کلاس B هست؟

naeeme
یک شنبه 13 مرداد 1387, 11:11 صبح
من فکر می کنم که لیست B( نه کلاس B) باید یک پراپرتی داشته باشه که آدرس لیست A در اون قرار بگیره و برعکس. در هر دو هم یک متد وجود داشته باشه که ورودی شون کد باشه و آیتم دارای اون کد رو انتخاب بکنن.

حالا اگر آیتمی در یکی از لیست‌ها انتخاب شد، متد selectItem(code) از لیست دیگه فراخوانی میشه.

-----
این نظریه خیلی ناپخته است. اما فکر کنم میشه براساسش یه چیزی طراحی کرد

Mrs.Net
یک شنبه 13 مرداد 1387, 18:22 عصر
تو روش شما باید یک راهی وجود داشته باشه که بدونیم کدام عضو از لیست کلاس آ انتخاب شده (چندمین عضو) . و این کار چجوری انجام میشه؟ (بجز استفاده از ایونتهای دیتاگرید ویو)

naeeme
دوشنبه 14 مرداد 1387, 09:16 صبح
من پیشنهاد داده بودم که متدی در کلاسها به نام فرضی SelectItem باشه که اون مقدار یونیک که در اینجا کد هست رو بگیره و یه جستجو در آیتمهای داخل لیست خودش انجام بده و آیتم مورد نظر رو پیدا کنه.
اون طور که شما در صورت مسئله بیان کردین، کد یه داده یونیک مشترک بین دو لیست هست. پس اگه از لیست A آیتمی با کد مثلا 14 انتخاب بشه، در لیست B هم آیتمی وجود داره که کد اون 14 هست.
مثلا شما اومدین و آیتمهای لیست A رو در این دیتا گرید ویو نمایش دادین، حالا سطری در این گرید انتخاب میشه. شما مطمئنا می تونین کد معادل آیتم اون سطر رو به دست بیارین، حالا با پاس دادن اون کد به SelectItem در کلاس B این متد، آیتمی که دارای اون کد هست رو به شما میده.
-----
نمی دونم جواب کافی بود یا نه!

Mrs.Net
دوشنبه 14 مرداد 1387, 18:54 عصر
من متوجه منظور شما شده بودم

اگه از لیست A آیتمی با کد مثلا 14 انتخاب بشه، در لیست B هم آیتمی وجود داره که کد اون 14 هست.
مسئله اصلی همین هست که چجوری بفهمیم الان کدام کد انتخاب شده؟!!
و جوابش درصورتی قابل قبول هست که از هیچ خصوصیت و ایونت مربوط به دیتاگرید استفاده نکنید. چون درغیر اینصورت یک relation نیست و فقط یک کدنویسی به حساب میاد.
خیلی ساده میشه با ایونت تغییر ردیف دیتاگرید یک تابع اضافه کرد که بره از لیست بی اون کد پیدا کنه اما من نمیخوام اینجوری رفتار کنم چون سرعت حرکت روی دیتاگرید گرفته میشه و میخوام این کار داخل کلاسها صورت بگیره.
امیدوارم متوجه تفاوت چیزی که میخوام شده باشید
ممنون

naeeme
سه شنبه 15 مرداد 1387, 10:37 صبح
جوابش درصورتی قابل قبول هست که از هیچ خصوصیت و ایونت مربوط به دیتاگرید استفاده نکنید
من هیچ ایده ای به ذهنم نمی رسه که طوری کد بنویسیم که با وجود انتخاب آیتم از گرید، از eventهای گرید استفاده نکنیم.
فقط همون چیزی که قبلا گفته بودم، به ذهن من میرسه که خوب خوبیش به اینه که کد فقط یه بار نوشته میشه( البته این مورد رو شما بهتر از من می دونین)

Mrs.Net
سه شنبه 15 مرداد 1387, 12:10 عصر
من هیچ ایده ای به ذهنم نمی رسه که طوری کد بنویسیم که با وجود انتخاب آیتم از گرید، از eventهای گرید استفاده نکنیم.
فقط همون چیزی که قبلا گفته بودم، به ذهن من میرسه که خوب خوبیش به اینه که کد فقط یه بار نوشته میشه( البته این مورد رو شما بهتر از من می دونین)
ممنونم که جواب میدی. جواب شما کاملا نتیجه درستی داره اما من به دلایلی نیاز دارم که اینکار (وابستگی) بدون اجرا شدن ایونتهای دیتاگرید ویو باشه و این محدودیت منو مجبور میکنه که از خاصیت relation بین دو تیبل استفاده کنم. اما مسئله اینجاست که من از تیبل استفاده نمیکنم و درواقع از یک جنریک لیست استفاده میکنم، که متاسفانه خاصیت ریلیشن نداره.
خوب پس دنبال یک راهی برای ایجاد خاصیت ریلیشن در جنریک کلاسها هستم.
بازم مرسی

-----
اگر میشد خاصیت ریلیشن بین دو عنصر از نوع کلاس جنریک ایجاد کرد این مشکلم حل میشد.