PDA

View Full Version : سوال: حدف آیتم های تکراری از کمبو باکس (ComboBox)



magnet
پنج شنبه 29 مهر 1389, 01:36 صبح
من از یه بانک اطلاعاتی اطلاعات رو داخل یک کمبو باکس قرار دادم و مثلا آیتم1 من که 3 بار در دیتابیس اومده رو سه بار نمایش داده اما من می خوام فقط یک بار نشون داده بشه.
چیکار باید بکنم؟

bade saba
پنج شنبه 29 مهر 1389, 02:36 صبح
شما احتمالا برای دریافت اطلاعات از دیتابیس کدی مشابه کد زیر مینویسی


SELECT column_name
FROM table_name

اگه کدت رو به شکل زیر بنویسی مشکلت حل میشه


SELECT column_name
FROM table_name
GROUP BY column_name

Salar Ashgi
جمعه 30 مهر 1389, 00:31 صبح
انجام کار بسادگی با LINQ :



string[] items = (from obj in comboBox1.Items.OfType<object>()
select obj.ToString()).ToList().Distinct().ToArray();
comboBox1.Items.Clear();
comboBox1.Items.AddRange(items);

shahin_sharifi
جمعه 30 مهر 1389, 01:15 صبح
سلام.شما به سادگی هرچه تمام تر می تونید کوئری رو که با اون اطلاعات رو میگیرید به این شکل با کلمه کلیدی distinct بنویسید و فکر نکنم اطلا لازم باشه وارد مبحث LINQ بشیم.چون اساسا linq کاربرد و فلسفه ی دیگری داره.مثال:

SELECT DISTINCT [FIELD] FROM TABLE

Salar Ashgi
جمعه 30 مهر 1389, 08:12 صبح
و فکر نکنم اطلا لازم باشه وارد مبحث LINQ بشیم.چون اساسا linq کاربرد و فلسفه ی دیگری داره.
ممنون میشم فلسفه اش رو شما بیان کنید !!!
تا جایی که بنده میدونم برای مدیریت هرچه بهتر Collection ها برای Linq to Sql و ... LINQ بهترین گزینه است . لطفا "وقتی راجب چیزی اطلاع دقیق ندارید ، حکم صادر نکنید ./

به نقل از ویکی پدیا :


LINQ defines a set of method names (called standard query operators, or standard sequence operators), along with translation rules from so-called query expressions to expressions using these method names, lambda expressions and anonymous types. These can, for example, be used to project and filter data in arrays (http://en.wikipedia.org/wiki/Array), enumerable classes (http://en.wikipedia.org/wiki/Class_%28computer_science%29), XML (http://en.wikipedia.org/wiki/XML) (LINQ to XML), relational database (http://en.wikipedia.org/wiki/Relational_database), and third party data sources. Other uses, which utilize query expressions as a general framework for readably composing arbitrary computations, include the construction of event handlers[1] (http://en.wikipedia.org/wiki/Language_Integrated_QueryC#%E2%80%8Eite_note-reactive-0) or monadic parsers.[2] (http://en.wikipedia.org/wiki/Language_Integrated_QueryC#%E2%80%8Eite_note-parscomb-1)

shahin_sharifi
جمعه 30 مهر 1389, 11:17 صبح
ممنون میشم فلسفه اش رو شما بیان کنید !!!
تا جایی که بنده میدونم برای مدیریت هرچه بهتر Collection ها برای Linq to Sql و ... LINQ بهترین گزینه است . لطفا "وقتی راجب چیزی اطلاع دقیق ندارید ، حکم صادر نکنید ./


ممکنه من اطلاعات اندازه ی شما نداشته باشم.ولی لزومی نداره شما وقتی یه چیز جدید یاد گرفتی بخوای با نشون دادنش به بقیه این دوستمون رو گمراه کنی و مسائل ساده رو با اون حل کنی.لزوما دوستمون اول باید مفاهیم sql رو یاد بگیره بعد وارد linq to sql بشه.

ممکنه در linq یکی از کاربردها این باشه که هر شی ای که IEnumerable رو پیاده سازی میکنه رو
به عنوان یک دیتا سورس بتوان در نظر گرفت . ولی فلسفه ایجاد و ارائه linq انجام اموری از این قبیل که دوستمون دنبالش بود نیست,بلکه برای این ارائه شد که با هر نوع منبع داده ای بتوان بصورت objective و مستقل از گرامر خاص اون منبع با یک گرامر یکسان ارتباط برقرار کرد.

magnet
شنبه 01 آبان 1389, 00:06 صبح
به نظرم روش های یک و سه به درد کار من میخوره، فقط توی کدهای این دو روش فقط نام یک ستون قرار داره اما من میخوام چند ستون رو بگیرم و فقط داده های یکی از ستون ها متمایز باشه.

کد مربوط به دیتابیس من اینه:


SELECT * FROM class
کد مربود به کمبوباکس:


cbclass.DisplayMember = "class";
cbclass.ValueMember = "cid";
cbclass.DataSource = dt;

bade saba
شنبه 01 آبان 1389, 23:07 عصر
این کار رو کردم اما جواب نداد.


بله اشتباه بود اما این کاری که میخوایید انجام بدید هم به نظر من منطقش اشتباهه به مثال زیر دقت کن

نام دانشگاه-------- رشته------------ اسم دانشجو
شریف-------------- MBA -------------علی
شریف------------ مکانیک -----------حسین
تهران------------- کامپیوتر------------ رضا
تهران------------- صنایع-------------- امیر


حالا فرض کن با توجه به اسم دانشگاه میخوای تکراری نداشته باشی و بقیه فیلد هارو هم داشته باشی ، مگه میشه؟؟؟؟ یعنی دو سطر رو در یک سطر نشون بده خوب حالا برای شریف اسم دانشجو رو باید چی بزاره؟؟؟؟ علی یا حسین؟؟؟ به نظر من اگه شما دقیق بگی میخوای چی کار کنی بهتر میشه کمکت کرد ؛ اما به هر حال این کاری که شما میگی منطقا نمیشه انجام داد

magnet
شنبه 01 آبان 1389, 23:57 عصر
به نظر من تو درست میگی. اما...؟؟
کاری که من میخوام انجام بدم اینه :
یه جدول سه ستونی دارم به اسم های: کد کلاس پایه نام کلاس
داده هاش هم مثلا اینا هستن:

کد کلاس ------- پایه ------- نام کلاس
---1-------------- اول----------همت
---2-------------- دوم -------- معرفت
---3-------------- سوم -------تلاش
---4-------------- سوم -------عظمت
---5-------------- سوم -------کوشش
---6-------------- چهارم ----- عزت
---7-------------- پنجم -------عرفان

الان من میخوام تو یه کمبوباکس فقط پایه کلاس نشون داده بشه، حالا اگه از روش یک ستونی GROUP By یا DISTINCT استفاده کنم عناصر متمایز رو نشون میده ولی به ترتیب حروف الفبا ولی من میخوام براساس کد یا به عبارت دیگه اول تا پنجم رو به ترتیب نشوم بده.
ممنون میشم کمکم کنید.

bade saba
یک شنبه 02 آبان 1389, 00:52 صبح
این چیزیه که به ذهن من میرسه که لزوما ( قطعا ) مناسبترین روش نیست برای این کار چون اکه تعداد رکوردات زیاد باشه بازده نداره ولی به هر حال اون کاری که میخوای رو انجام میده



strSQL = "Select * From table1";
OleDbConnection ODCon = newOleDbConnection(strConnection);
OleDbDataAdapter ODDAdapter = newOleDbDataAdapter(strSQL, ODCon);
DataTable DT = newDataTable();
ODCon.Open();
ODDAdapter.Fill(DT);
ODCon.Close();


for (int i = 0; i < DT.Rows.Count; i++)
{
if (comboBox1.Items.Contains(DT.Rows[i]["column_name"]) == false)
{
comboBox1.Items.Add(DT.Rows[i]["column_name"]);
}
}

mahdi87_gh
یک شنبه 02 آبان 1389, 12:58 عصر
سلام.شما به سادگی هرچه تمام تر می تونید کوئری رو که با اون اطلاعات رو میگیرید به این شکل با کلمه کلیدی distinct بنویسید و فکر نکنم اطلا لازم باشه وارد مبحث LINQ بشیم.چون اساسا linq کاربرد و فلسفه ی دیگری داره.مثال:

SELECT DISTINCT [FIELD] FROM TABLE

جواب ایشون کاملا درسته

چرا اینقدر این قضیه رو الکی پیچوندینش وقتی به همین راحتی جواب میده!!!:متفکر:

shahin_sharifi
یک شنبه 02 آبان 1389, 23:31 عصر
دوست عزیز اینطور که پیداست کار شما تقریبا استاتیکه و تغییری در پایه ها نداری.اگر واقعا به این شکله شما پایه ها رو در ایتم های کومبو دستی وارد کن و به خودت دردسر نده.چون خیلی از دوستان فکر میکنن حتما باید داده ها از دیتا بیس خونده بشه ولی وقتی این داده ها در طول اجرای برنامه تغییری نمی خواد بکنه هیچ لزومی نداره از دیتا بیس خونده بشه.
موفق باشی

programerinfonet
شنبه 20 فروردین 1390, 14:55 عصر
فرمایشات آقای شاهین شریفی درسته :
دستور DISTINCT کاملأ درسته من خودم شخصأ تست کردم جوابب داده

programerinfonet
شنبه 20 فروردین 1390, 15:29 عصر
سلام دوستان :
البته من هم این مشکل رو دارم و پیشنهاد آقای شریفی هم درسته ولی در مواقع جستجو نه در مواقع نمایش
حال اگه بخواهیم در زمان نمایش این کار انجام بشه چی کار کنیم ؟