PDA

View Full Version : سوال: اضافه نکردن مقادیر تکراری به لیست ComboBox.



arash ghafori
چهارشنبه 20 اردیبهشت 1391, 19:44 عصر
با سلام خدمت اساتید .

من یه ComboBox دارم و یه دکمه ی Add .
با زدن Add مقادیرم به یه بانک SQL اضافه میشه . و از اونجا به لیست ComboBox اضافه میشه.

حالا من میخوام مقادیر تکراری در لیست ComboBox نشون داده نشه .

ممنون.

sds1920
چهارشنبه 20 اردیبهشت 1391, 20:03 عصر
قبل از اضافه کردن به comboBox با تابع Contain چک کنيد.اگه قبلا اضافه شده اضافه نکنيد.

arash ghafori
چهارشنبه 20 اردیبهشت 1391, 20:05 عصر
کد نویسیشو بلد نیستم . اگه امکانش هست یکم واضح تر بگید ممنون میشم .

arash ghafori
چهارشنبه 20 اردیبهشت 1391, 21:39 عصر
خواهش میکنم یکی کمکم کنه !!!!!

arash ghafori
پنج شنبه 21 اردیبهشت 1391, 02:07 صبح
دوست عزیز ممنون از کدتون....
اما منظورم این نبود که مقادیر تکراری به بانک اضافه نشه ، منظورم این بود که مقادیر تکراری به ComboBox اضافه نشه.... یعنی بیاد ComboBox رو چک کنه !
چنین چیزی امکان داره ؟

saeidpsl
پنج شنبه 21 اردیبهشت 1391, 04:52 صبح
سلام

این

using System.Windows.Forms;

رو اول فورمت یا در بخش using اضافه کن

اینم خود کد


int r = comboBox.Items.Count;
ArrayList newList = new ArrayList();

//Load all Items into temp array
string[] temp = new string[r];
for (int i = 0; i < r; i++)
{
temp[i] = comboBox.Items[i].ToString();
}
 
//Add unique items to new ArrayList
foreach (string ts in temp)
{
if (!newList.Contains(ts))
{
newList.Add(ts);
}
}

comboBox.Items.Clear();
foreach (string ns in newList)
{
comboBox.Items.Add(ns.ToString());
}

Mahmoud.Afrad
پنج شنبه 21 اردیبهشت 1391, 05:31 صبح
اگر کمبوباکس رو از ذیتابیس پر میکنید میتونید از سلکت زیر برای پر کردن کمبو استفاده کنید و نتیجه رو به کمبو بایند کنید اما یادتون باشه که مقادیری که در کمبو قرار میگیرند اولین مقادیری هستند که در دیتابیس ثبت شدند، یعنی اگر چند رکورد به نام a داشته باشیم با این کار اولین a سلکت میشه و به طبع id اولین a. پس valuemember آیتم a در کمبوباکس میشه همین id و عملا بقیه رکورد ها استفاده نمیشند.


select id,name
from (
select *,row_number() over (partition by name order by name) as row_number
from tbl
) as rows
where row_number = 1


id , name رو متناسب با جدول خودتون تنظیم کنید.

Ghaem66
پنج شنبه 21 اردیبهشت 1391, 11:03 صبح
if (!comboBox1.Items.Contains(textBox1.Text))
{
comboBox1.Items.Add(textBox1.Text);
}

arash ghafori
پنج شنبه 21 اردیبهشت 1391, 14:39 عصر
سلام

این

using System.Windows.Forms;

رو اول فورمت یا در بخش using اضافه کن

اینم خود کد


int r = comboBox.Items.Count;
ArrayList newList = new ArrayList();

//Load all Items into temp array
string[] temp = new string[r];
for (int i = 0; i < r; i++)
{
temp[i] = comboBox.Items[i].ToString();
}
 
//Add unique items to new ArrayList
foreach (string ts in temp)
{
if (!newList.Contains(ts))
{
newList.Add(ts);
}
}

comboBox.Items.Clear();
foreach (string ns in newList)
{
comboBox.Items.Add(ns.ToString());
}







با سلام و تشکر . اما کلاس ArrayList رو با توجه به استفاده از Using تون نمیشناسه.

Ghaem66
جمعه 22 اردیبهشت 1391, 01:28 صبح
با تشكر از دوست عزيز mafaman2003 (http://barnamenevis.org/member.php?71297-mafaman2003)
اول يه كلاس درست كن به اين صورت


class cls_connection
{
static public SqlConnection objconnection = new SqlConnection();
static public SqlCommand objcommand = new SqlCommand();
static public SqlDataReader objreader;

static public void CreatConnection()
{
objconnection.Close();
objconnection.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DataBaseName.mdf;Integrated Security=True;User Instance=True";
objconnection.Open();
objcommand.Connection = objconnection;
}
}


بعدش تو فرمت اين كد رو بنويس



cls_connection.CreatConnection();
cls_connection.objcommand.CommandText = "select myItem from myTable";
cls_connection.objreader = cls_connection.objcommand.ExecuteReader();
while (cls_connection.objreader.Read())
{
if (!comboBox1.Items.Contains(cls_connection.objreade r["myItem"].ToString()))
{
comboBox1.Items.Add(cls_connection.objreader["myItem"].ToString());
}
}
cls_connection.objconnection.Close();

Mahmoud.Afrad
جمعه 22 اردیبهشت 1391, 01:50 صبح
Ghaem66 (http://barnamenevis.org/member.php?140988-Ghaem66) عزیز
اینی هم که شما گفتید میشه منتها باید آقای arash ghafori (http://barnamenevis.org/member.php?246457-arash-ghafori) مشخص کنند که میخواهند از valuemember کمبوباکس استفاده کنند یا نه؟
اگر فقط میخواهند یک ستون از جدول رو به کمبو بایند کنند که همون اول جواب میدادم که با اضافه کردن distinct به دستور سلکت همه مشکلات حل میشه:


select distinct name from table

اما اگر قرار باشه ستونی مثل id رو به valuemember اختصاص بدهند روش شما و همین روش distinct جواب نخواهد داد.

arash ghafori
جمعه 22 اردیبهشت 1391, 02:21 صبح
اساتید محترم ، متشکر از راهنمایی ها و وقتی که گذاشتید .
ممنون که کمکم کردید.

arash ghafori
جمعه 22 اردیبهشت 1391, 03:38 صبح
نه . یه راه حل دیگه به جای این کار توی برنامه جایگزین کردم . اونم اینکه وقتی توی Combo حرف M رو زد هر چی با M شروع میشه بیاره. دیگه نیاد همه چیه اون ستون رو نمایش بده . این بهتره از اون راه . اون موضوع یه جورایی افزونگی داده میاره !!!!
البته تونستم با راهنمایی شما ها و چنتا پروژه ، یه دکمه ی Add to List بزارم که کاربر با سلکت نام مورد نظر در Data grid اون رو به Combo اضافه کنه .

بازم ممنون از راهنماییای با ارزشتون .