ورود

View Full Version : فیلتر کردن با Listbox



solook
شنبه 06 مهر 1387, 08:49 صبح
با سلام

اقلامی listbox ی که من استفاده میکنم مجموع دو فیلد از دیتابیس هست .
اگه خواسته باشم اینم انتخاب شده listbox رو در دیتابیس فیلتر کنم جواب نمیده چون اینم مجموع یک فلید با یکی دیگه فیلد هست

حالا برا فیلتر کردن با حالتی که من گفتم چه راهی هست ؟

amin_alexi
شنبه 06 مهر 1387, 09:55 صبح
سلام
چرا نتونستيد تو DataBase فيلتر كنيد ! چه دستوري استفاده كردين !؟
راه ديگه وقتي دارين به ListBox اضافه مي كنيد شرط بزبرين !

solook
شنبه 06 مهر 1387, 14:33 عصر
بذارید بیشتر توضیح بدم

با این کد عناوین نتایج جستجو به listbox اضافه میکنم :


ListBox.Items.Clear;

for I=0 to qury.RecordCount-1 do

ListBox.Items.Add(qury.FieldByName('filde1').AsStr ing+'بخش'+qury.FieldByName('filde2').AsString);

qury.Next;
end;خب با این کد برا فیلتر یقینا جواب نمیده:

Qury.Filter := 'filde1 = ' + QuotedStr(ListBox.Items.ValueFromIndex[Index]);چون ایتم انتخاب شده مجموع دو فیلد با یک کلمه اضافه هست و این هرگز با فیلدی که قرار درش فیلتر بشه برابری نمیکنه ..

Hsimple11
شنبه 06 مهر 1387, 14:51 عصر
خودتون متوجه میشید چی رو میخواهید؟!

اگه میخواهید بر اساس هر دو فیلد فیلتر کنید که از AND استفاده کنید و دو تا ListBox مثلا. اگر هم از یک فیلد چرا دوتا رو در ListBox وارد میکنید؟! اگر هم باید به هر دلیل این کار صورت بگیره با انواع توابع بیایید قسمتهای مختلف آیتم های ListBox خودتون رو از هم جدا کنید و بعد فیلتر کنید.

solook
شنبه 06 مهر 1387, 14:56 عصر
دوست عزیز دوتا لیست باکس که نیست
یک لیست باکس هست اما در هر ایتمی مجموع دو فیلد (نام کتاب +نام بخش کتاب)
مثلا :
نام کتاب +''+نام بخش کتاب

از AND هم نمیشه استفاده کرد چون علاوه بر اون دو فیلد یک چیزی اضافه داره..به اون کد دقت کنید متوجه میشید..

Hsimple11
شنبه 06 مهر 1387, 15:45 عصر
منم میدونم دوتا لیت باکس نیست!

پست من رو با دقت بخونید. فکر کنم به جواب برسید.

MozenAbasi
سه شنبه 16 مهر 1387, 15:01 عصر
سلام
از سايت بسيار بسيار عالي شما كمال تشكر را دارم .
چگونه ميشه كه يك ركورد از جدولي در SQL را در يك list box قرار داد ؟

solook
سه شنبه 16 مهر 1387, 17:02 عصر
این کدشه :


ListBox.Items.Clear;

ListBox.Items.Add(qury.FieldByName('filde1').AsStr ing);

carbon
پنج شنبه 18 مهر 1387, 04:26 صبح
دوست عزیز دوتا لیست باکس که نیست
یک لیست باکس هست اما در هر ایتمی مجموع دو فیلد (نام کتاب +نام بخش کتاب)
مثلا :
نام کتاب +''+نام بخش کتاب

از AND هم نمیشه استفاده کرد چون علاوه بر اون دو فیلد یک چیزی اضافه داره..به اون کد دقت کنید متوجه میشید..

سلام
خب بيا اون مقداري رو كه در listbox هست رو با توابع رشته تجزيه كن. يعني اول اون كلمه مياني (بخش) يا هر چيزي كه هست رو حدف كن(مثلا با StringReplace) بعد مقادر فيلدهاتو از هم جدا كن. البته يه راه ساده تر هم هست ولي خيلي استاندارد نيست.

مي توني دو تا listbox اضافي بذاري روي فرم و در حالت invisible‌ قرارشون بدي. وقتي listbox اصليتو پر ميكني


ListBox.Items.Add(qury.FieldByName('filde1').AsStr ing+'بخش'+qury.FieldByName('filde2').AsString);

اونارم به صورت جدا جدا از همون فيلد ها پر كن

ListBox.Items.Add(qury.FieldByName('filde1').AsStr ing);
ListBox3.Items.Add(qury.FieldByName('filde2').AsSt ring);

و موقع فيلتر كردن از اون listbox هاي invisible استفاده كن.
نمي دونم واضح بود يا نه اگه ناجور بيان كردم بگو تا از اول بگم.

solook
پنج شنبه 18 مهر 1387, 07:08 صبح
روش دومی تو ذهن خودمم بود

حالا چطوری کاری کنم که وقتی کاربر اون لیست باکس اولی رو کلید میزنه بره رو همون قسمت مشابهش در لیست باکس دومی که مخفی هست

carbon
پنج شنبه 18 مهر 1387, 15:22 عصر
روش دومی تو ذهن خودمم بود

حالا چطوری کاری کنم که وقتی کاربر اون لیست باکس اولی رو کلید میزنه بره رو همون قسمت مشابهش در لیست باکس دومی که مخفی هست

خيلي سادس
توي onchange ليست باكس اصليت كه ديده ميشه اين خطو بنويس.

ListBox2.ItemIndex := ListBox1.ItemIndex;
اين باعث ميشه هر وقت ItemIndex ايست باكس اصليت تغيير كرد ليس باكس هاي مخفيت هم تغيير كنن. موقع بازيابي هم ميتوني استفاده كني به اين صورت :

str := ListBox2.Items[ListBox1.ItemIndex];

چون هر دو ليست باكس ها باهم پر ميشن ترتيب ايندكس يكيه و مشكلي ايجاد نميكنه.
اگه واضح نبود كدشو كامل آپلود كنم.