PDA

View Full Version : نشان دادن اطلاعات بر اساس مورد سرچ



meitti
پنج شنبه 23 آبان 1387, 16:35 عصر
سلام
من واسه فرمم یه سرچ نوشتم ام وقتی سرچ مینکم فقط یه دونه از چیزهایی که ثبت شده را نشون میده (مثلا اگه 5 تا ردیف باشه فقط یه دونه را نمایش میده) می خواستم بدونم چیکار باید بکنم که همه ردیفهایی که من برا اساس اون سرچ کردم رو تو لیست ویو نشون بده و فقط اون چیزی که من گفتم تو لیست ویو نشون داده بشه وبقیه اطلاعات نشون داده نشه

abbasegold
پنج شنبه 23 آبان 1387, 23:47 عصر
دوست عزیز حداقل Query رو میزاشتی ...

meitti
جمعه 24 آبان 1387, 11:04 صبح
سلام
این هم کد نوشته شده :


if (cmbSearch.Text == "مورد انتخابی")
{
for (int i = 0; i < lsv.Items.Count; i++)
{
if (lsv.Items[i].SubItems[0].Text == txtSearch.Text)
{
lsv.Focus();
lsv.Items[i].Focused = true;
lsv.Items[i].Selected = true;
lsv.EnsureVisible(i);
return;
}
}
}

danial82
جمعه 24 آبان 1387, 11:19 صبح
بخاطر return که نوشتی
اولین رکوردی رو که پیدا میکنه از for خارج میشه

meitti
جمعه 24 آبان 1387, 11:28 صبح
بخاطر return که نوشتی
اولین رکوردی رو که پیدا میکنه از for خارج میشه

منظورتون اینه که اگه return بردارم درست میشه یا چیز دیگه ای هم باید اضافه کنم

meitti
شنبه 25 آبان 1387, 11:34 صبح
:گریه: !!! Please Help me

alimh123
یک شنبه 26 آبان 1387, 12:07 عصر
return رو بردار درست میشه!

meitti
یک شنبه 26 آبان 1387, 13:09 عصر
return رو بردار درست میشه!

برداشتم میره روی پیامی که بعدا براش گذاشتم که اگه چیزی نبود نمایش بده (جستجو ناموفق)

meitti
دوشنبه 27 آبان 1387, 11:34 صبح
:متفکر: :افسرده: :گریه:

jeyjix
دوشنبه 27 آبان 1387, 12:06 عصر
دوست خوبم :
در رويداد onchange تكست باكس جستجوت يه while بزار تا هر بار كه تغييري داخلش صورت ميگيره تمام عناصر lsv رو چك كنه و اگه رشته ي مورد نظرت وجود نداره اون ايندكس رو حذف كنه .

اما اگه مي خواي چيزي از ليستت حذف نشه يه كليد next بزار كه با هر بار فشار دادن اون :
1-محل فعلي رو ذخيره كنه (selected
2-از محل فعلي تا آخر ليستت رو بگرده
3- اگر به مورد مشابهي رسيد اون ايندكس رو select كنه و از حلقه خارج بشه
راه حل اول فيلتر ميكنه و راه حل دوم جستجوي مورد به مورد انجام ميده
اميدوارم منظورت رو درست فهميده باشم و درست بهت جواب داده باشم


راستي findstring رو هم يه چك بكن .شايد كارت رو راحت كنه .ايندكس محلي رو بر ميگردون از lsv كه با تكست cmbsearch برابره و اگر مورد مشابهي پيدا نكنه مقدار -1 رو بر ميگردونه

jeyjix
دوشنبه 27 آبان 1387, 12:12 عصر
راستي اگه multiselect رو true كني و يكبار تمام ليستت رو چك كني و اگر رشته ها مساوي بودن اون ايندكس رو select كني در آخر تمام موارد مشابهت select ميشن !!!
من خنگم ؟؟؟؟؟

meitti
دوشنبه 27 آبان 1387, 12:17 عصر
دوست خوبم :
در رويداد onchange تكست باكس جستجوت يه while بزار تا هر بار كه تغييري داخلش صورت ميگيره تمام عناصر lsv رو چك كنه و اگه رشته ي مورد نظرت وجود نداره اون ايندكس رو حذف كنه .

اما اگه مي خواي چيزي از ليستت حذف نشه يه كليد next بزار كه با هر بار فشار دادن اون :
1-محل فعلي رو ذخيره كنه (selected
2-از محل فعلي تا آخر ليستت رو بگرده
3- اگر به مورد مشابهي رسيد اون ايندكس رو select كنه و از حلقه خارج بشه
راه حل اول فيلتر ميكنه و راه حل دوم جستجوي مورد به مورد انجام ميده
اميدوارم منظورت رو درست فهميده باشم و درست بهت جواب داده باشم


راستي findstring رو هم يه چك بكن .شايد كارت رو راحت كنه .ايندكس محلي رو بر ميگردون از lsv كه با تكست cmbsearch برابره و اگر مورد مشابهي پيدا نكنه مقدار -1 رو بر ميگردونه

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

meitti
دوشنبه 27 آبان 1387, 12:30 عصر
راستي اگه multiselect رو true كني و يكبار تمام ليستت رو چك كني و اگر رشته ها مساوي بودن اون ايندكس رو select كني در آخر تمام موارد مشابهت select ميشن !!!

من می خوام select بشه اطلاعاتی که هست و بقیه دیگه نشون داده نشن

jeyjix
دوشنبه 27 آبان 1387, 12:31 عصر
در رويدادهاي txtbox يه گزينه داري به اسم textchange
حالا داخل اون يه while بذار كه شرطش رسيدن به ايندكس آخر باشه .
هر بار يه رديف رو سلكت كن , مقايسه كن , اگه مشابه بود كه هيچ وگرنه اونو remove كن و به رديف بعدي برو .
دقت كن كه حساب وقتي اشتباهي بزني يا دوباره بخواي جستجو كني رو هم بايد داشته باشي چون اينجا عناصر ليستت دارن حذف ميشن

jeyjix
دوشنبه 27 آبان 1387, 12:38 عصر
اگه ليستت به بانك اطلاعاتي وصله يه فيلد chek بهش اضافه كن
توي changtext با هر تغييري تمام ركوردهاي بانك رو چك كن .اگه رشته داخلش وجود داشت مقداره chek رو 1 وگرنه 0 كن و در آخر هم lsv رو با شرطي نمايش بده كه chek=1 باشه
يعني واسه sql ===

select * from "databasename" where chek=1

meitti
یک شنبه 03 آذر 1387, 20:00 عصر
سلام
این هم کد نوشته شده :

کد:
if (cmbSearch.Text == "مورد انتخابی")
{
for (int i = 0; i < lsv.Items.Count; i++)
{
if (lsv.Items[i].SubItems[0].Text == txtSearch.Text)
{
lsv.Focus();
lsv.Items[i].Focused = true;
lsv.Items[i].Selected = true;
lsv.EnsureVisible(i);
return;
}
}
}


__________________




با توجه به راهنمایی دوستان کد بالا به ترتیب زیر تغییر دادم وجواب مورد نظر خودمو گرفتم :قهقهه::گیج::اشتباه:


if (cmbSearch.Text == "مورد سرچ")
{
for ( int i = 0; i < lsvMachines.Items.Count; ++i)
{
if (lsvMachines.Items[i].SubItems[1].Text.ToString() != txtSearch.Text)
{

lsvMachines.Items[i].Remove();
i = 0;

}
}

}

meitti
یک شنبه 27 بهمن 1387, 20:29 عصر
یه تغییرات کوچیکی روی این سرچ انجام دادم که بعضی ایراد های اونو بر طرف کرد
هر چند ابتدایی هست اما گفتم بذارم تا........


if (txtSearch.Text != "")
{
if (cmbSearch.Text == "جستجو بر اساس" && (txtSearch.Text.Trim() != "مورد جستجو") )
{
for (int i = 0; i < lsvIns_Penalty.Items.Count; i+=0)
{
if (lsvIns_Penalty.Items[i].SubItems[0].Text != txtSearch.Text)
{
lsvIns_Penalty.Items[i].Remove();

}
else
i++;
}

}