PDA

View Full Version : سوال: آشنايي با Valumember در Combobox



rahe behtari hast
سه شنبه 07 آذر 1391, 13:27 عصر
در combobox يك چيزي وجود داره به اسم valumember من اين رو درست نميفهم. كيها ازش استفاده ميكنيم؟ چيزي كه ما داخل يك combobox ميبينيم يك سري نوشته است. اگر اين نوشته ها نياز به يك عدد يونيك داشته باشن اون عدد رو بايد داخل valumember بنويسيم؟
مثلا من ميخوام ماههاي سال رو داخل دو تا combobox بنويسم به طوري كه وقتي كاربر كومبو باكس دومي رو ارديبهشت انتخاب كرد و اولي رو بهمن پيغام خطا بده كه شروع و پايان رو بد انتخاب كردي. من ناچار شدم دونه دونه ايف بذارم براي تمام حالات. با valumember چطور ميشه به اين 12 ماه 12 تا عدد نسبت داد و گفت اگر عدد دوم بزرگ تر از اول بود خطا بده؟

valuemember مثل text به صورت دستي پر نميشه؟ مستقيم خودم بيام پرش كنم؟

hakim22
سه شنبه 07 آذر 1391, 19:42 عصر
اشتباه نکنید .

ValueMember یک خاصیت فقط خواندنی است و تنها در صورتی مقدار میگیرد که شما از Data Binding استفاده کرده باشد. مقدار آن توسط Bind پر میشود و می تواند به انتخاب شما هر کدام از فیلدهای یک جدول باشد .

اما به صورت مستقیم امکان دسترسی و تغییر آن وجود ندارد

ramin_rp
سه شنبه 07 آذر 1391, 20:24 عصر
سلام
همون طور که دستمون گفتن امکان مقدار دهی دستی به value member تو کامبوباکس وجود نداره
اگر شما نیاز به این مورد دارین میتونید از combobox شرکت janus استفاده کنید.

plus
سه شنبه 07 آذر 1391, 20:45 عصر
تعجب میکنم که دوستان میگن امکان مقدار دهی به ValueMember توی ComboBox نیست!
شما برای این کاری که میخواین میتونین از SelectedIndex استفاده کنین و اونا رو مقایسه کنید ولی خوب برای حالات دیگه میتونید از ValueMember استفاده کنید.
برای استفاده از ValueMember شما باید به ComboBox یک DataSource بدین.آیتم های این دیتا سورس باید یک فیلد مقدار (Value) داشته باشن که میتون همون عدد یونیکی باشه که مد نظر شماست و یک فیلد برای نمایش که همون متنی هست که در ComboBox نمایش داده میشه.ValueMember نام فیلد مقدار و DisplayMember نام فیلد نمایش رو مشخص میکنه:





public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

Month[] months = new Month[]
{
new Month("فروردین", 1),
new Month("اردیبهشت", 2),
new Month("خرداد", 3),
new Month("تیر", 4),
new Month("مرداد", 5),
new Month("شهریور", 6),
new Month("مهر", 7),
new Month("آبان", 8),
new Month("آذر", 9),
new Month("دی", 10),
new Month("بهمن", 11),
new Month("اسفند", 12),
};

comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Number";
comboBox1.DataSource = months;

}


private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(string.Format("Selected Value = {0}", comboBox1.SelectedValue));
}


class Month
{
public Month(string Name, int Number)
{
this.Name = Name;
this.Number = Number;
}

public string Name
{
get;
set;
}

public int Number
{
get;
set;
}
}
}

در این حالت DataSource ما از نوع آرایه ای از Month هست که فیلد مقدار Number و فیلد نمایش Name هست.در واقع ComboBox همونطور که دوستمون گفتن به DataSource ، متصل (Bind) شده.

samadblaj
سه شنبه 07 آذر 1391, 22:03 عصر
میشه plus جان خواهش کنم در قالب یک سورس قرارش بدید تا ما هم استافده کنیم...
منم توی یکی از برنامه هام باید چند سال پیاپی رو نمایش دهم...
1389-1390
1390-1391
به این شکل و باید بار ها فراخوانی بشه لطفا اگه میشه در قالب پروژه بذارید تا مشکل منم راه بیفته با تشکر...

plus
سه شنبه 07 آذر 1391, 22:28 عصر
میشه plus جان خواهش کنم در قالب یک سورس قرارش بدید تا ما هم استافده کنیم...
منم توی یکی از برنامه هام باید چند سال پیاپی رو نمایش دهم...
1389-1390
1390-1391
به این شکل و باید بار ها فراخوانی بشه لطفا اگه میشه در قالب پروژه بذارید تا مشکل منم راه بیفته با تشکر...

از اونجایی که شما سال ها رو پشت سر هم در نظر گرفتی و یک بازه نیست، در واقع مقدارش فقط سال هست، کلاس سال رو با یک مقدار در نظر می گیریم و فقط موقع نمایش با فرمت درست نمایش میدیم:


class Year
{
public Year(int Value)
{
this.Value = Value;
}

public int Value
{
get;
set;
}

public string Name
{
get { return string.Format("{0}-{1}", Value, Value + 1); }
}
}

ramin_rp
چهارشنبه 08 آذر 1391, 07:18 صبح
تعجب میکنم که دوستان میگن امکان مقدار دهی به ValueMember توی ComboBox نیست!


جناب plus ، ما نگفتیم امکانش نیست ما گفتیم به صورت دستی امکانش وجود نداره
قبل از شما هم دوستمون تو پست قبلی توضیح داده بودن که باید Data bind بشه
کاری که شما انجام دادین چیزی غیر از این نیست.

plus
چهارشنبه 08 آذر 1391, 12:47 عصر
جناب plus ، ما نگفتیم امکانش نیست ما گفتیم به صورت دستی امکانش وجود نداره
قبل از شما هم دوستمون تو پست قبلی توضیح داده بودن که باید Data bind بشه
کاری که شما انجام دادین چیزی غیر از این نیست.
حرف شما درست ولی من پیشنهاد میکنم بجای اینکه برای هر کار ساده ای کامپوننت های آماده رو که هر کدوم n تا مشکل دارن به دوستان معرفی کنید، روش درستش رو بهشون بگید.