PDA

View Full Version : Auto Complete یا سرچ در DataGridView چطورمیشه؟



am_abbas65
چهارشنبه 03 مرداد 1386, 16:00 عصر
سلام دوستان من چطور میتونم وقتی که کاربر روی یک سلول datagridview دکمه ای فشار میده مثلا "ر" موجودی هایی رو نشون بده که با حرف ر شروع میشن اگه "را" رو نوشت همینتور موجودی هایی که با "را" شروع میشن و تا اخر که "رامین" یا چیز دیگه ای رو نشون بده. در ضمن محتوای datagrid تغییر نکنه و اگه escape ro zad بتونه کلمه دیگهای رو سرچ کن .

m_nejad
چهارشنبه 03 مرداد 1386, 17:15 عصر
متن توی Vb6 یک ocx برای اینکار نوشتم روشم کدی هم این بود که توی یک لیست را از فیلدی که قرار Auto Complete بشه پر میکنم. این لیست باکس مخفی است و با تایپ هر هرف لیست را فیلتر کرده و در محل مناسب نمایش میدم .

newgoldenman
چهارشنبه 03 مرداد 1386, 17:43 عصر
چه سوال جالبی
منم چند وقته دنبال همچین چیزی هستم.

منتظر جوابهای دوستان عزیزمون هستیم...

hdv212
پنج شنبه 04 مرداد 1386, 01:11 صبح
am_abbas65 عزیز من که جواب شما رو با نمونه کد دادم، چرا پست دوباره دادی، حداقل اگه متوجه نشدی توی همون پست بنویس، حالا بگو ببینم کجاشو متوجه نشدی ؟ در ضمن AutoComplete با اینی که شما میخوای فرق میکنه.
http://barnamenevis.org/forum/showthread.php?t=73931

am_abbas65
پنج شنبه 04 مرداد 1386, 10:54 صبح
am_abbas65 عزیز من که جواب شما رو با نمونه کد دادم، چرا پست دوباره دادی، حداقل اگه متوجه نشدی توی همون پست بنویس، حالا بگو ببینم کجاشو متوجه نشدی ؟ در ضمن AutoComplete با اینی که شما میخوای فرق میکنه.
http://barnamenevis.org/forum/showthread.php?t=73931

من وقتی میخواستم اون تاپیک رو سند کنم سایت ارور داد . من هم نتونستم وارد سایت بشم . بعدش چند ساعت بعد دوباره تاپیک رو سند (با فزض اینکه تاپیک اولی سند نشده)کردم الان که شما گفتین گشتم اونو پیدا کردم .لطفا ببخشید.
در ورد جوابت تشکر

hdv212
پنج شنبه 04 مرداد 1386, 13:58 عصر
خواهش میکنم am_abbas65 جان، امیدوارم مشکلت حل بشه.

am_abbas65
پنج شنبه 04 مرداد 1386, 15:23 عصر
آقای hdv212 این کدی که دادی دستت درد نکنه درست کار کرد. ولی این دستور تمام dataset رو فیلتر میکنه و اونایی که فیلتر شدن رو نشون میده . اگه بخواهیم به رکورد مورد نظر فوکوس کنیم و داده ها همشون صحیح و سالم باشن چیکار باید بکنیم؟
به نظرمن باید اول edit Datagrid رو فعال کنیم و هر کجا کاراکتری زده شد اونو تو متغییر بذاریم و سپس دوباره داده ها رو لود کنیم و جایی که با اون متغییر شروع شده رو پیدا کنیم و به اونج فوکوس کنیم .من میرم رو این کار کنم اگه شما به نتیجه رسیدین به ما هم بگین

newgoldenman
جمعه 05 مرداد 1386, 00:48 صبح
آقای hdv212 این کدی که دادی دستت درد نکنه درست کار کرد. ولی این دستور تمام dataset رو فیلتر میکنه و اونایی که فیلتر شدن رو نشون میده . اگه بخواهیم به رکورد مورد نظر فوکوس کنیم و داده ها همشون صحیح و سالم باشن چیکار باید بکنیم؟
به نظرمن باید اول edit Datagrid رو فعال کنیم و هر کجا کاراکتری زده شد اونو تو متغییر بذاریم و سپس دوباره داده ها رو لود کنیم و جایی که با اون متغییر شروع شده رو پیدا کنیم و به اونج فوکوس کنیم .من میرم رو این کار کنم اگه شما به نتیجه رسیدین به ما هم بگین

دوست عزیز
فکر نکنم پیشنهاد جالبی باشه! البته برای جداول کوچیک، جوابگو هست و سرعت خوبی هم داره! ولی اگر با تعداد ردیفی مثل چند میلیون در ارتباط باشیم چیکار باید کرد؟!

حتماً این سوال بسیار عالی، جواب داره!

از دوستان حتماً کسی هست که این سوال براش پیش اومده قبلاً و به نتیجه هم رسیده!

منتظر پاسخهای شما به این سوال هستیم (;

am_abbas65
جمعه 05 مرداد 1386, 23:27 عصر
اره ولی اگه دستوری باشه مثل شبه کد زیر :

#datagridview.focus() where cell bgins with "text"#

اکه مال #C باشه و خودش این کار رو بکنخ بنظرم اشکالی پیش نمیاد.

hdv212
شنبه 06 مرداد 1386, 00:19 صبح
am_abbas65 جان، چیزی که شما میخوای ممکنه جوابی فراتر از یه رکورد رو داشته باشه، مسیری رو که به شما گفتم برای برگرداندن یه جدول فیلتر شده بر اساس شرط مورد نظره، یعنی چند رکورد، در صورتی که شما میخواهی زمانی که کاربر داره تایپ میکنه، فوکوس روی رکوردی بره که با نوشته ی کاربر match باشه، خب حالا به من بگو اگه شرط مورد نظر که همون کلمه ی تایپ شده ی کاربر هست دارای بیش از یک رکورد جواب باشه، دیتاگرید روی کدوم یکی از جوابها فوکوس کنه ؟ من فکر کنم از همون طریقی که راهنماییت کردم بهتر باشه.
در جواب سوال newgoldenman عزیز هم باید بگم که بله، این روش برای داده های حجیم، جالب نیست، برای داده های حجیم عموما این روشها استفاده نمیشه، مگر اینکه به روشی بتونی اطلاعات رو cache کنی.

am_abbas65
شنبه 06 مرداد 1386, 18:37 عصر
am_abbas65 خب حالا به من بگو اگه شرط مورد نظر که همون کلمه ی تایپ شده ی کاربر هست دارای بیش از یک رکورد جواب باشه، دیتاگرید روی کدوم یکی از جوابها فوکوس کنه ؟ من فکر کنم از همون طریقی که راهنماییت کردم بهتر باشه.


روی اولین رکوردی که پیدا بشه.

ali2000_1358
دوشنبه 22 مرداد 1386, 09:36 صبح
دوست عزیز از BindingSource.Filter استفاده کن
مقدار filter رو برابر با یک رشته بزار مثل زیر که اون رشته با تایپ شما محتویاتش تغییر میکنه
مثل مثال زیر
'%"+this.ameliyatBindingSource.Filter = "fullname like '%" + st

st یک رشته است که مد نظر شماست برای جستجو و fullname فیلدی از dataset که جستجو باید بر روی آن اعمال شود .در ضمن این فیلتر فقط روی خود BindingSource و نه روی dataset


دوست عزیز بهتر ین کار استفاده ویژگی ازFilter در خوBindingSourceمی باشد