PDA

View Full Version : حذف آیتم انتخابی در یک ComboBox از کامبوباکسهای دیگر



farnoosh66
جمعه 14 خرداد 1395, 21:00 عصر
با سلام
دوستان 5تا کمبوباکس دارم که مقادیرشونو از یه جدول میگیرن، فرض کنیم a,b,c,d,e مقادیر جدول باشند.
توی لود فرم دستوری نوشتم که با لود فرم مقادیر کمبو برابر با جدول میشود و کاربر میتونه هر کدومو که بخواد انتخاب کنه.
حالا مشکلم اینه طوری کنترل کنم کاربر نتونه تو کمبوباکس مقدار تکراری انتخاب کنه.1- ترجیحا بجز اینکه با if بخوام مقدار textشونو چک کنم، چه راهه دیگه ای پیشنهاد میدین؟؟

با تشکر

mrprestige
جمعه 14 خرداد 1395, 22:58 عصر
با سلام
دوستان 5تا کمبوباکس دارم که مقادیرشونو از یه جدول میگیرن، فرض کنیم a,b,c,d,e مقادیر جدول باشند.
توی لود فرم دستوری نوشتم که با لود فرم مقادیر کمبو برابر با جدول میشود و کاربر میتونه هر کدومو که بخواد انتخاب کنه.
حالا مشکلم اینه طوری کنترل کنم کاربر نتونه تو کمبوباکس مقدار تکراری انتخاب کنه.1- ترجیحا بجز اینکه با if بخوام مقدار textشونو چک کنم، چه راهه دیگه ای پیشنهاد میدین؟؟

با تشکر
سلام به شما وقت بخیر ، شما میتونین با استفاده از حلقه foreach هم این کار رو بکنید یعنی به این صورت

foreach (var dvrow in comboBox1.Items)
{
if (dvrow.ToString() == textBox1.Text)
{
MessageBox.Show("این مقدار وجود دارد.",
"خطای مقدار تکراری",
MessageBoxButtons.OK, MessageBoxIcon.Error);


break;
}
}


ببین این مثالی که زدم با تکس باکس هست که حلقه میاد تمام مقادیر کمبوباکس رو بررسی میکنه اگه برابر با مقداری بود که ما توی تکس باکس نوشتیم پیغام خطای داده ی تکراری رو بهمون میده حالا بسته تغییراتی که میخوای بدی با این کد هم میتونی از انتخاب مقادیر تکراری در کمبو جلوگیری کنی .
پیروز و موفق باشید .
از کدنویسی لذت ببرید.

Mahmoud.Afrad
شنبه 15 خرداد 1395, 00:36 صبح
میتونید آیتم انتخابی یک کمبو را از دیتاسورس کمبوهای دیگر حذف کنید.
به چه صورت کمبو رو پر کردید؟ کد بزارید.

farnoosh66
شنبه 15 خرداد 1395, 01:41 صبح
DataSet ds4 = new DataSet();
ds4 = sql.fill("select * from tblGroup where GroupID='" + x2 + "'");
comboBox3.DataSource = ds4.Tables["hi"];
comboBox3.DisplayMember = "GroupName";
comboBox3.ValueMember = "GroupName";

Mahmoud.Afrad
شنبه 15 خرداد 1395, 05:50 صبح
میتونید از طریق RowFilter در کلاس DataView ، فیلتر مناسب را روی دیتاسورس اعمال کنید؛ به اینصورت که برای هر کمبوباکس، آیتمهایی مورد قبول باشد که در کمبوهای دیگر سلکت نشده باشند.
فیلتر Not In در لینک زیر رو نگاه کنید:
http://www.csharp-examples.net/dataview-rowfilter


private void SetFilterToComboBoxes()
{
if (_allComboBoxesList == null) return;
foreach (ComboBox comboBox in _allComboBoxesList)
{
string strFilter = "id NOT IN (";
var listToGetSelectedValue = _allComboBoxesList.Where(c => !c.Equals(comboBox)).ToList();

foreach (ComboBox anotherComboBox in listToGetSelectedValue)
{
int selectedId = Convert.ToInt32(anotherComboBox.SelectedValue);
strFilter += selectedId + ",";
}
strFilter += "-9999999)";

comboBox.BeginUpdate();
int intTemp = Convert.ToInt32(comboBox.SelectedValue);
DataView dv = comboBox.DataSource as DataView;
if (dv != null) dv.RowFilter = strFilter;
comboBox.SelectedValue = intTemp;
comboBox.EndUpdate();
}
}
در رویداد SelectedIndexChanged کمبوباکسها ، متد بالا رو فراخوانی کنید.