PDA

View Full Version : سوال: ایراد در ComboBoxهای مرتبط! (LINQ)



hadimtn
شنبه 17 مرداد 1394, 19:29 عصر
سلام.
همانطور که در تصویر زیر مشاهده میکنید توسط LINQ کمبوی اول رو + "انتخاب کنید" که در سطر اول نمایش داده میشه پر کردم.
گزینه های کمبوی دوم هم به اولی بستگی داره، دستورات بدون خطی که خطا گرفته اجرا میشه! امام میخوام حتما بعد از انتخاب گزینه ی اول در کمبوی دوم هم " انتخاب کنید " نمایش داده باشه!

134035

134037

Mahmoud.Afrad
یک شنبه 18 مرداد 1394, 01:49 صبح
بستگی داره که چه چیزی رو سلکت کردید. در کمبو اول فقط نامها رو سلکت کردی ولی در کمبو دوم اشیایی از نوع objectTables .
ساختار دو تا جدولت چیه(ستونهاش؟)


و یک نکته اینکه تکلیفتون رو مشخص کنید که میخواهید از LinqToSql یا EF یا tableadapter مربوط به دیتاست استفاده کنید. (نه اینکه نشه تلفیقی از چند تکنولوژی رو استفاده کرد بلکه اگر از یکی استفاده کنید تمرکز، کدنویسی، خطایابی و ... راحت تر خواهد بود)

hadimtn
یک شنبه 18 مرداد 1394, 15:16 عصر
بستگی داره که چه چیزی رو سلکت کردید. در کمبو اول فقط نامها رو سلکت کردی ولی در کمبو دوم اشیایی از نوع objectTables .
ساختار دو تا جدولت چیه(ستونهاش؟)

134063

134062

میخوام وقتی یه ObjectName رو تو ComboBox اول (نام کالا) انتخاب کردم، همه ی Brand هایی که تو جدول برای اون کالا ثبت شدن تو ComboBox دوم (نشان) نمایش داده بشه!


و یک نکته اینکه تکلیفتون رو مشخص کنید که میخواهید از LinqToSql یا EF یا tableadapter مربوط به دیتاست استفاده کنید. (نه اینکه نشه تلفیقی از چند تکنولوژی رو استفاده کرد بلکه اگر از یکی استفاده کنید تمرکز، کدنویسی، خطایابی و ... راحت تر خواهد بود)
بنده از LinqToSql استفاده میکنم، اون کدها مربوط به بایند کردن ویزاردی دیتا گرید و کمبوهاست! EF هم اصلا نمیدونم چیه... شاید ناخواسته استفاده کرده باشم!

hadimtn
یک شنبه 18 مرداد 1394, 21:32 عصر
گزینه ی انتخاب کنید هم مثل مورد اول باید براشون نمایش داده بشه!

Mahmoud.Afrad
یک شنبه 18 مرداد 1394, 23:56 عصر
(وقتی عکس میذاری تو تاپیک، نمیشه اصلاحش کرد! از این به بعد کد رو بین تگ سی شارپ قرار بده. چون قبلا جواب دادم ، برای اینکه به جواب برسی کد زیر رو دستی نوشتم. )



اول کد زیر رو در سطح کلاس(فرم) بنویس

private const string FirstItem = "انتخاب کنید...";


کدی که objectSelector_ComboBox رو پر میکنی به صورت زیر تغییر بده:

var query = (from c in db.ObjectTables select c.ObjectName).Distinct().OrderBy(item => item).ToList();
query.Insert(0, FirstItem);



کدی که brandSelector_ComboBox رو پر میکنی به صورت زیر بنویس

if (objectSelector_ComboBox.SelectedItem != null && objectSelector_ComboBox.SelectedItem.ToString() == FirstItem)
{
brandSelector_ComboBox.Visible = false;
}
else
{
var query =
(from record in db.ObjectTables
where record.ObjectName == objectSelector_ComboBox.SelectedItem.ToString()
select record).ToList();

query.Insert(0, new ObjectTable() {ID = -9999, ObjectName = FirstItem});
brandSelector_ComboBox.DataSource = query;
brandSelector_ComboBox.DisplayMember = "name";
brandSelector_ComboBox.ValueMember = "id";
brandSelector_ComboBox.Visible = true;
}

hadimtn
دوشنبه 19 مرداد 1394, 02:17 صبح
ممنون.

(وقتی عکس میذاری تو تاپیک، نمیشه اصلاحش کرد! از این به بعد کد رو بین تگ سی شارپ قرار بده. چون قبلا جواب دادم ، برای اینکه به جواب برسی کد زیر رو دستی نوشتم. )
با عرض پوزش، عکس گذاشتم به دلیل اینکه دقیقاً مشخص بشه کجا رو خطا گرفته!
ممنون بابت کدهایی که تایپ کردید، چون همینجوری کپی کردم اصلا خطا نگرفت! :لبخندساده:
فقط name رو به Brand تغییر دادم!


کدی که brandSelector_ComboBox رو پر میکنی به صورت زیر بنویس

if (objectSelector_ComboBox.SelectedItem != null && objectSelector_ComboBox.SelectedItem.ToString() == FirstItem)
{
brandSelector_ComboBox.Visible = false;
}
else
{
var query =
(from record in db.ObjectTables
where record.ObjectName == objectSelector_ComboBox.SelectedItem.ToString()
select record).ToList();


query.Insert(0, new ObjectTable() {ID = -9999, ObjectName = FirstItem});
brandSelector_ComboBox.DataSource = query;
brandSelector_ComboBox.DisplayMember = "name";
brandSelector_ComboBox.ValueMember = "id";
brandSelector_ComboBox.Visible = true;
}

جسارتاً تو قسمت شرط آیا objectSelector_ComboBox.SelectedItem.ToString() == FirstItem کافی نیست ؟! چون هیچ وقت نام کالا خالی نمیشه! :متفکر:

در ضمن؛ "انتخاب کنید" (FirstItem) برای کمبوی دوم نمیاد! سطر خالی میاد!

134107

اگه میشه قسمت query.Insert(0, new ObjectTable() {ID = -9999, ObjectName = FirstItem}); رو توضیح بدین!
اینکه مشخصه میخواین ثابت تعریف شده رو به اولین سطر insert کنین؛
قسمتی که از جدول یه نمونه ساختین ، دو تا جدول رو با هم به کمبو وصل کردین؟!

Mahmoud.Afrad
دوشنبه 19 مرداد 1394, 02:48 صبح
خب با این پیش زمینه ، میتونی شرط رو اصلاح کنی.

در تکنولوژی LinqToSql هر جدول دیتابیس یه یک کلاس نگاشت میشه. با توجه به کوئری ، رکوردهایی که مورد نظر هستند با شرط جلوی where انتخاب میشن. این انتخاب در قالب مجموعه ای از اشیائ کلاس ObjectTable خواهد بود(query مجموعه ای از ObjectTable است) خب برای اضافه کردن به این مجموعه باید ابتدا یک شئ از همین نوع ایجاد کنیم و مقدار پراپرتی که نمایش داده میشود(در اینجا پراپرتی Brand) را با مقدار مناسب مقداردهی میکنیم.
به اینصورت اصلاح کن:

query.Insert(0, new ObjectTable() { Brand = FirstItem });