PDA

View Full Version : دستور select متفاوت



sara.pazhrang
یک شنبه 10 تیر 1386, 11:09 صبح
با سلام
میخوام یک دستور select بذارم که وقتی اولین حرف را وارد textbox کردم در جدول مربوطه جستجو کرده و تمام رکوردهایی که با اولین حرف textbox شروع میشوند را پیدا کند.و وقتی دومین حرف را وارد textbox کردم تمام رکوردهایی که با آن دو حرف شروع میشود را جستجو کند. و همین طور برای حروف بعدی.

دستوری که من برای select نوشتم دقیقا محتوای textbox را search می کند و محتوای textbox باید دقیقا با رکورد مربوطه یکسان باشد و در واقع مشکل کار در اینجاست که با وارد کردن اولین حرف تمام فیلدهایی که با آن حرف شروع می شوند را پیدا نمی کند.
توضیح : دستورات مربوط به select را داخل textbox_changed نوشته ام.


selectCommandString = "select * from نام جدول where Name like '" + textBoxFilter.Text + "'";

reza_rad
یک شنبه 10 تیر 1386, 11:11 صبح
به اینصورت بنویسید:


Name like '" + textBoxFilter.Text + "%'"

__H2__
یک شنبه 10 تیر 1386, 11:24 صبح
سلام
خود دات نت همچین امکانی دارد و نیاز به کد نویسی دستی ندارد فقط کافیست لیست همه را لود کنید و با کمک خصوصیت AutoCompleteXXXXXX این را راه بری کنید.
و در نهایت چیزی دارید شبیه برنامه های ویندوزی که تا تایپ میکنید لیست ظاهر میشود، خیلی هم راحت تر است، فقط کافیست لیست کلیه کلمات را بدهید و تنظیمات را ست کنید.

mahla.mojhdehi
یک شنبه 10 تیر 1386, 11:37 صبح
سلام
خود دات نت همچین امکانی دارد و نیاز به کد نویسی دستی ندارد فقط کافیست لیست همه را لود کنید و با کمک خصوصیت AutoCompleteXXXXXX این را راه بری کنید.
و در نهایت چیزی دارید شبیه برنامه های ویندوزی که تا تایپ میکنید لیست ظاهر میشود، خیلی هم راحت تر است، فقط کافیست لیست کلیه کلمات را بدهید و تنظیمات را ست کنید.

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

sara.pazhrang
یک شنبه 10 تیر 1386, 11:42 صبح
به اینصورت بنویسید:
کد:
Name like '" + textBoxFilter.Text + "%'"

آقای راد عزیز آیا میتوانید منبعی را در اینترنت یا کتابی را معرفی کنید که چنین دستوراتی (مثل % برای select) را به طور خلاصه توضیح دهد.
اصلا این دستورات از چه منطقی پیروی می کنند.

reza_rad
یک شنبه 10 تیر 1386, 11:52 صبح
در کل برای یادگیری Transact SQL این منبع خیلی خوب و کاملیه که می تونید از همینجا هم PDF اش رو دانلود کنید چون free هست:
http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug

و برای بحث مربوط به Select ها و فقط خوندن دیتاها از دیتابیس می تونید بخش دوم همین لینک بالا رو مطالعه کنید:
http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/4639#X

kiani.mehdi
یک شنبه 10 تیر 1386, 12:13 عصر
حل این مشکل



با سلام
میخوام یک دستور select بذارم که وقتی اولین حرف را وارد textbox کردم در جدول مربوطه جستجو کرده و تمام رکوردهایی که با اولین حرف textbox شروع میشوند را پیدا کند.و وقتی دومین حرف را وارد textbox کردم تمام رکوردهایی که با آن دو حرف شروع میشود را جستجو کند. و همین طور برای حروف بعدی.




با این روش






Name like '" + textBoxFilter.Text + "%'"





اصلا درست نیست چون performence برنامه را شدیدا تحت تاثیر قرار میده
اگه قرار باشه برای هر کاراکتری که کاربر توی تکست باکس استفاده میکنه یه دستور select بنویسیم که فاجعه میشه
فکر کنید اگه توی یه table به تعداد 1000000 رکورد داشته باشیم اونوقت چی میشه ؟ :متفکر: :اشتباه:

پس این راه اصلا عقلانی نیست بهترین راه استفاده از همون خاصیت autocomplete هستش که کاربر H2 هم به اون اشه ره کردن



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


بله ابتدا داده های فیلدی که میخواین را توش جستجو کنید را به یه comboBox بایند کنید البته بهتره به جای بایند از خاصیت دیتا سورسش استفاده بشه و لعد هم از autocomplete استفاده کنید و ..... ببرین

موفق باشید
مهدی کیانی

sara.pazhrang
یک شنبه 10 تیر 1386, 12:31 عصر
آقای کیانی عزیز من هم منظورم این نیست که برای هر چه که در textbox نوشتم یک دستور select بگذارم. در حقیقت من فقط یک دستور select آن را هم داخل textbox_changed گذاشته ام یعنی با هر تغییری که در textbox ایجاد می شود دستور select مربوط به آن تغییرات می شود.
آیا با این توضیحات باز هم روش من نا درست است؟

sara.pazhrang
یک شنبه 10 تیر 1386, 12:52 عصر
له ابتدا داده های فیلدی که میخواین را توش جستجو کنید را به یه comboBox بایند کنید البته بهتره به جای بایند از خاصیت دیتا سورسش استفاده بشه و لعد هم از autocomplete استفاده کنید و ..... ببرین
روش بایند کردن رو بلدم اما برنامه من به این صورته که یک combobox دارم که در آن تمام فیلدهای جدول را add کردم. بعد یک textbox جلوش گذاشتم که حکم یک فیلتر رو دارد یعنی با انتخاب یک فیلد در combobox این textbox مال آن فیلد می شود و هر چیزی که در textbox نوشتم مثل یک فیلتر برای آن فیلد است و باید تمام فیلدهای combobox.text که در textbox هستند را داخل datagridview بیاورم.
برای توضیحات بیشتر فایل زیر را ببینید
.

kiani.mehdi
یک شنبه 10 تیر 1386, 12:58 عصر
آقای کیانی عزیز من هم منظورم این نیست که برای هر چه که در textbox نوشتم یک دستور select بگذارم. در حقیقت من فقط یک دستور select آن را هم داخل textbox_changed گذاشته ام یعنی با هر تغییری که در textbox ایجاد می شود دستور select مربوط به آن تغییرات می شود.
آیا با این توضیحات باز هم روش من نا درست است؟

فکر کنم شما مفهوم رویداد text_chenged را خوب متوجه نشدین
بنده هم میدونم که شما دستورتون را تو text_chenged گذاشتین واسه همسنه که میگم این کار غلطه
برای اینکه هر تغییری که توی متن تکست باکس اتفاق بیافته کدهایی که توی رویداد text_Chenged هستند اجرا میشه
پس اگه خوب دقت کنید میبینید که به ازائ هر کاراکتر حتی کاراکتر space کد شما اجرا میشه و این یعنی فاجعه

بهتره از اون روشی که گفتم استفاده کنین چون استاندارد هستش به این دلیل که شما فقط یه دستور select مینویسین اون هم جهت بایند کردن combobox نه به ازائ هر تغییر یه select
بعدش هم از خاصیت autocomplete استفاده میکنید
چون این خاصیت از خواص خود دات نت هستش پس مطمئنا از لحاظ کارایی (جستجو ، چون autocomplete چیزی غیر از یه جستجو نیست) در حد خوب وعالی هستش

kiani.mehdi
یک شنبه 10 تیر 1386, 13:06 عصر
روش بایند کردن رو بلدم اما برنامه من به این صورته که یک combobox دارم که در آن تمام فیلدهای جدول را add کردم. بعد یک textbox جلوش گذاشتم که حکم یک فیلتر رو دارد یعنی با انتخاب یک فیلد در combobox این textbox مال آن فیلد می شود و هر چیزی که در textbox نوشتم مثل یک فیلتر برای آن فیلد است و باید تمام فیلدهای combobox.text که در textbox هستند را داخل datagridview بیاورم.
برای توضیحات بیشتر فایل زیر را ببینید
.

منظورت را دقیقا متوجه نشدم اگه بتونی یه مثال بزنی بهتر میتونم کمکت کنم
فکر کنم که شما میخواین مثلا اگر در تکست باکس کاربر حرف (ع) را وارد کرد و مثلا combobox روی infoemation name بود توی دیتا گرید تمامی row هایی که فیلد information name اونا با حرف ع شرو میشه نشون داده بشه
درست متوجه شدم؟
منظورتون همینه؟

sara.pazhrang
یک شنبه 10 تیر 1386, 13:17 عصر
آقای کیانی ممنون از توضیحاتتون. حالا متوجه شدم. اما حالا مشکلم دستورات autocompelete است. پس الان باید ابتدا combobox رو به datasource بایند کنم بعدش چطور باید از autocomplete برای تکستباکس استفاده کنم.
میشه بیشتر توضیح بدید؟

kiani.mehdi
یک شنبه 10 تیر 1386, 13:24 عصر
آقای کیانی ممنون از توضیحاتتون. حالا متوجه شدم. اما حالا مشکلم دستورات autocompelete است. پس الان باید ابتدا combobox رو به datasource بایند کنم بعدش چطور باید از autocomplete برای تکستباکس استفاده کنم.
میشه بیشتر توضیح بدید؟

اوووووووووووووووو چه خبره
به خدا یه بار که دکمه send را بزنید مطلبتون پست میشه :بامزه:

بعدشم شما جواب سوال منو ندادین
آیا همون کاری را میخواین بکنین که من حدس زدمیا نه؟
موفق باشید
مهدی کیانی

sara.pazhrang
یک شنبه 10 تیر 1386, 13:25 عصر
:خجالت: ببخشید . زیاد با این سایت وارد نبودم نفهمیدم صفخه دومی باز شده. هی پاسخ می دادم فکر می کردم ارسال نشده:خجالت:

sara.pazhrang
یک شنبه 10 تیر 1386, 13:26 عصر
منظورت را دقیقا متوجه نشدم اگه بتونی یه مثال بزنی بهتر میتونم کمکت کنم
فکر کنم که شما میخواین مثلا اگر در تکست باکس کاربر حرف (ع) را وارد کرد و مثلا combobox روی infoemation name بود توی دیتا گرید تمامی row هایی که فیلد information name اونا با حرف ع شرو میشه نشون داده بشه
درست متوجه شدم؟
منظورتون همینه؟

آره آقای کیانی عزیز دقیقا منظورم اینه

mahla.mojhdehi
یک شنبه 10 تیر 1386, 13:30 عصر
سلام آقای کیانی
دوستم Sara pajhrang مشکلی براش پیش اومد و رفت و از من خواست تا بهتون بگم که"منظورش همین چیزی بود که شما گفتید و ازتون ممنونه"

kiani.mehdi
یک شنبه 10 تیر 1386, 13:47 عصر
سلام آقای کیانی
دوستم Sara pajhrang مشکلی براش پیش اومد و رفت و از من خواست تا بهتون بگم که"منظورش همین چیزی بود که شما گفتید و ازتون ممنونه"

سلام خواهش میکنم
برای این کاری که دوستتون میخوان بکنن خاصیت Autocompelete به دردشون نمیخوره
خاصیت AutoComplete بیشتر برای مواقعی به کار میره که ما بخوایم مستقیما چیزی را توی combobox تایپ کنیم
برای این کاری که دوستتون میخوان انجام بدن باید یه مقداری کد نویسی کرد
البته خیلی کم
مینویسم و احتمالا تا چند مین دیگه آپ میکنم

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

essa_61
یک شنبه 10 تیر 1386, 13:48 عصر
حل این مشکل
بله ابتدا داده های فیلدی که میخواین را توش جستجو کنید را به یه comboBox بایند کنید البته بهتره به جای بایند از خاصیت دیتا سورسش استفاده بشه و لعد هم از autocomplete استفاده کنید و ..... ببرین

دوست عزیز آیا event ی داریم که وقتی اسمی که توسط کاربر انتخاب میشه در لیست نباشه اونو تشخیص بده

kiani.mehdi
یک شنبه 10 تیر 1386, 13:57 عصر
البته نمیدونم دقیقا منظورتون جیه ولی
نه
نیازی نیست
خوب وقتی نیست ،نیست دیگه چیشو تشخیص بده ؟ اینو شما باید با کد مشخص کنین که آیا اسم وارد شده هست یا نه

موفق باشید
مهدی کیانی

essa_61
یک شنبه 10 تیر 1386, 14:12 عصر
دوست عزیز توی اکسس خود کمبو باکس یک event داره که تشخیص می ده بله نیاز هست فکر کنید توی یه بانک 100000 خود شما باید بگردید تا ببینید آیا تکست که کاربر نوشته وجود داره یا نه پس این خوب نیست پس مجبورید readonly را true کنید که دیگه autocomplete معنا نداره

ضمنا تکست باکس هم نمیشه به دیتا ست وصل کرد البته میشه bind کرد ولی autocomplete رو روی چی تنظیم کنیم که به دیتا ست وصل بشه
متشکرم

kiani.mehdi
یک شنبه 10 تیر 1386, 15:08 عصر
دوست عزیز توی اکسس خود کمبو باکس یک event داره که تشخیص می ده بله نیاز هست فکر کنید توی یه بانک 100000 خود شما باید بگردید تا ببینید آیا تکست که کاربر نوشته وجود داره یا نه پس این خوب نیست پس مجبورید readonly را true کنید که دیگه autocomplete معنا نداره

ضمنا تکست باکس هم نمیشه به دیتا ست وصل کرد البته میشه bind کرد ولی autocomplete رو روی چی تنظیم کنیم که به دیتا ست وصل بشه
متشکرم

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


موفق باشید
مهدی کیانی

__H2__
یک شنبه 10 تیر 1386, 15:28 عصر
سلام
من در این لینک زیر قبلاً توضیحی در مورد چگونگی استفاده از AutoComplete داده ام. (http://forum.p30world.com/showthread.php?p=904845#post904845)

essa_61
دوشنبه 11 تیر 1386, 13:47 عصر
سلام دوستان عزیز
شاید درست منظور من رو متوجه نشدید من میتونم با یه خط کد دیتا ستم رو به تکست باکس یا کمبو باکس وصل کنم توی کمبو باکس که مشکلی نیست کافی پراپرتی رو روی ListItems گذاشتم ولی تکست باکس همچین چیزی نداره حالا متوجه منظورم شدید ؟؟؟

ضمنا ایراد دوم که هم شامل تکست باکس هم کمبو باکس میشه اینه که اگه کاربر کلمه ای رو که توی تکست مینویسه توی محدوده نبود چی کار باید کرد ؟ اگه قراره خودمون با کد چک کنیم که اصلا معنا نداره چون شاید تعداد رکوردها خیلی زیاد باشه میشه بگید پیشنهاد شما چیه ؟؟؟؟

__H2__
دوشنبه 11 تیر 1386, 14:21 عصر
سلام
شما مگر نمیخواستید که وقتی کاربر چیزی تایپ میکند، شما فوراً لیستی از آیتم هایی که با حرف های تایپی او مچ هستند باز شود؟؟؟؟؟؟؟؟؟
هم TextBox و هم ComboBox این خصوصیت را دارد و کافیست از آن به همان نحوی که در لینک داده بودم استفاده کنید.

برای استفاده از این قابلیت شما باید تمام بلاک متنهای ممکن را در شروع فرم، لود کنید و به AutoComplete تحویل دهید.

essa_61
دوشنبه 11 تیر 1386, 14:38 عصر
میشه لطفا دقیق تر جواب منو بدید توی تکست باکس باید خصوصیت روی چی تنظیم شود میشه یه مثال بزندی
ممنون میشم
ضمنا راهی برای مشکل دوم سراغ دارید

ضمنا توضیحات شما فقط در مورد کمبو باکس هستش

kiani.mehdi
دوشنبه 11 تیر 1386, 15:08 عصر
ضمنا ایراد دوم که هم شامل تکست باکس هم کمبو باکس میشه اینه که اگه کاربر کلمه ای رو که توی تکست مینویسه توی محدوده نبود چی کار باید کرد ؟ اگه قراره خودمون با کد چک کنیم که اصلا معنا نداره چون شاید تعداد رکوردها خیلی زیاد باشه میشه بگید پیشنهاد شما چیه ؟؟؟؟




منظورتون چیه ؟ خوب اگه متنی که کاربر تایپ میکنه نباشه نیست دیگه یعنی پیدا نمیشه
چیزی را نیاز نیست چک کنید
فکر میکنم شما هنوز خوب متوجه نشدین اصلا autocomplete به چه کاری میاد

essa_61
دوشنبه 11 تیر 1386, 15:22 عصر
فرض کنید قراره از این کمبو باکس اطلاعاتی بره توی یه بانک دیگه ذخیره بشه حالا وقتی کاربر بتونه چیزی توی کمبو باکس تایپ کنه که در لیست نباشه پس میتونه اونو هم ذخیره کنه چطوری جلوی این موضوع رو میگیرید

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

امیدوارم متوجه شده باشید منظورم چیه

kiani.mehdi
دوشنبه 11 تیر 1386, 16:42 عصر
فرض کنید قراره از این کمبو باکس اطلاعاتی بره توی یه بانک دیگه ذخیره بشه حالا وقتی کاربر بتونه چیزی توی کمبو باکس تایپ کنه که در لیست نباشه پس میتونه اونو هم ذخیره کنه چطوری جلوی این موضوع رو میگیرید

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

امیدوارم متوجه شده باشید منظورم چیه

همون دیگه میگم اصلا نمی دونین که autocomplete به چه درد میخوره
عزیز من این خاصیت فقط یه امکان برای کاربر میذاره که متنی که میخواد را زود تر پیدا کنه
ورود به دیتا بیس و این حرفا هیچ ربطی به این خاصیت نداره
سایت ماکروسافت بخش msdn2 را یه نگاهی بنداز
همچنین خیلی از سایت های دیگه و برنامه های دیگه
کنترل اطلاعات به عهده خودتونه
البته میتونین با کومبو یه کامپوننت بنویسین که علاوه بر این خاصیت کارایی که شما میخواین را هم انجام بده

__H2__
دوشنبه 11 تیر 1386, 17:07 عصر
سلام


ضمنا توضیحات شما فقط در مورد کمبو باکس هستش
AutoComplete یک قابلیت است که مخصوص ComboBox نیست و روی TextBox معمولی دات نت هم عمل میکند، (به همان روش که توضیح دادم و هیچ فرقی ندارد!)

و همانطور که دوستمان اشاره کردند، این قابلیت جهت تایپ سریعتر است و کاربر را محدود نمیکند، همین قابلیت در Toolbar برنامه IE و MyComputer و... وجود دارد، یا در کادر سرچ ویندوز، جلوی کسی را نمیگیرد... صرفاً به او کمک میکند و لغت تایپی او را حدس میزند!

اگر شما میخواهید چیزی خارج از لیست وارد نشود کلاً باید کامبو را با کمک خصوصیت DropDownStyle قفل کنید، و اگر تعداد آیتم های موجود در لیست خیلی زیاد است، خوب بهتر است فضای بیشتری به این کار اختصاص دهید و از یک ListBox کشیده تر استفاده کنید.
حسن یکی از دو روش فوق آن است که اصلاً کاربر دیگر قادر نخواهد بود چیزی وارد کند و باید یکی از موارد لیست را انتخاب کند.

ولی اگر بر AutoComplete تاکید دارید، بازهم کاری ندارد، قبل از ذخیره در بانک با یک استعلام ساده از بانک، چک کنید و ببینید مقدار وارد شده کاربر مجاز است یا نه؟!

essa_61
سه شنبه 12 تیر 1386, 14:11 عصر
اولا اگه میشه یه مثال با تکست باکس برای من بذارید به جای اینکه بگید فرقی نداره ...... که یه تکست باکس به یه دیتا ست وصل بشه و بشه با autocomplete باهاش کار کرد

ضمنا شما که میگی به برنامه های دیگه نگاه کن میشه به اکسس نگاه کنی توی اکسس این کارو خودش با یه event انجام میده



ولی اگر بر AutoComplete تاکید دارید، بازهم کاری ندارد، قبل از ذخیره در بانک با یک استعلام ساده از بانک، چک کنید و ببینید مقدار وارد شده کاربر مجاز است یا نه؟!

اینقدر راحت میگید به نظرت کار خوبی که توی یه بانک با 1000000 رکورد یه بار چک کنی ببینی همچین مقداری وجود داره یا نه

__H2__
چهارشنبه 13 تیر 1386, 08:16 صبح
سلام


اینقدر راحت میگید به نظرت کار خوبی که توی یه بانک با 1000000 رکورد یه بار چک کنی ببینی همچین مقداری وجود داره یا نه

بزرگترین دانشگاه ها و شرکت های دنیا صرفاً 20 یا 30 یا حداکثر 40 هزار عضو دارند.
بزرگترین فروشگاهها هم همین وظعیت را دارند.
بزرگترین سایت آرشیو فیل و سریال در اینترنت حدود 300 هزار فیلم ثبت شده دارد....
شما اطمینان دارید که یک میلوین سطر در بانک اطلاعاتیتان دارید؟؟؟؟؟؟؟؟
مگه اینکه سفارش طراحی یاهو و گوگل را گرفته باشید؟!

باشه، یک میلیون قبول و به روی چشم!!!! (حالا چرا میزنی!)
مثلاً کاربر میخواهد لغت "مهدی" را وارد کنه!
"م" رو میزنه، کد شما تشریف میبرند و با کمک دستور نسبتاً سنگین LIKE تمام آیتمهایی را که با "م" شروع میشوند در می آورند، با یک تخمین ریاضی میتوان گفت چیزی حدود 25 هزار آیتم میشود که با "م" شروع میشود، کد شما باز تشریف می آورند و 25 هزار لغت پیشنهادی را در یک لیست خیلی کوچک به کاربر نشان میدهد!!! کاربر لطف میکند و حرف "ه" را تایپ میکند و مجدداً کد شما تشریف میبرند و با همان دستور LIKE آیتم ها را در آورده و به کاربر نشان میدهد و الی آخر.... و اگر هم کاربر Backspace را هم بزند باز این سرچ عظیم باید از اول انجام شود....
حالا به نظر کارشناسی و ژئوپولتیکی شما این کد اصلاً باعث عدم کارائی و سرعت نمیشود؟؟؟؟ :متفکر: ولی یک دستور COUNT که بسیار سریع و جزء دستورات سبک محسوب میشود و تازه باید فقط یک بار آنهم در پایان تایپ کاربر از آن استفاده شود باعث عدم سرعت و کارآئی برنامه شما میشود؟؟؟؟؟؟؟؟
خیلی باحالی بابا!!!! :بوس:
من واقعاً لذت میبرم این جوانان رشید را میبینم که اینقدر به فکر سرعت هستند!!!!!! :لبخند:
آخرین پیشنهاد! که تعادل خوبی بین میزان کدنویسی و سرعت دارد. (فقط تو رو خدا نگید سورس بذار که خیلی دبستانی است!)
اگر تعداد آیتم ها کم، فقط کل نام ها را در یک DataTable بار کنید و به خصویت AutoCompleteCustomSource تحویل دهید.
اگر تعداد آیتم ها زیاد است، اول تعداد کل را محاسبه کنید و سپس یک آرایه String ای به آن تعداد بسازید (یکبار بسازید و دیگر تغییر سایز ندهید!) و سپس به کمک DataReader و یک حلقه کوچک، تک تک String را خوانده و در محل آرایه مورد نظر بریزید (میتوانید در دستور SQL استخراج با کمک ASC باعث مرتب سازی داده هم شوید.) و سپس آرایه مذکور را به جای DataTable تحویل AutoCompleteCustomSource دهید.
این حالت کمترین RAM را میگیرد و بدون شک از این کمتر امکان ندارد، مگر انکه داده ها در همان فایل در هارد باقی بماند (ولی روش سریعتر امکان دارد!) در کل، شاید برای یک تعداد 100 هزار آیتمی با لغات حدوداً 15 حرفی، در کل چیزی حدود چهار و نیم مگ RAM بگیرد.
در آخر هم که کار تایپ کاربر تمام شد، با یک دستور COUNT ناقابل وجود یا عدم وجود داده را چک کنید.
در آخر احساس میکنم که آن تاپیک را که لینکش را داده بودم درست نخواندید!!! :لبخند:
لینک (http://forum.p30world.com/showthread.php?p=904845#post904845)
علما و فضلا و جوانان رشید جمیعاً موفق باشید و بای!

essa_61
چهارشنبه 13 تیر 1386, 11:02 صبح
"م" رو میزنه، کد شما تشریف میبرند و با کمک دستور نسبتاً سنگین LIKE تمام آیتمهایی را که با "م" شروع میشوند در می آورند، با یک تخمین ریاضی میتوان گفت چیزی حدود 25 هزار آیتم میشود که با "م" شروع میشود، کد شما باز تشریف می آورند و 25 هزار لغت پیشنهادی را در یک لیست خیلی کوچک به کاربر نشان میدهد!!! کاربر لطف میکند و حرف "ه" را تایپ میکند و مجدداً کد شما تشریف میبرند و با همان دستور LIKE آیتم ها را در آورده و به کاربر نشان میدهد و الی آخر.... و اگر هم کاربر Backspace را هم بزند باز این سرچ عظیم باید از اول انجام شود....

توی کجای صحبت های من شما دیدید که من گفتم از این روش باید این کارو انجام داد من گفتم توی اکسس این کارو خودش انجام میده چرا توی سی شارپ نیست یا هست ما نمی دونیم
اگه هم جسارت کردم ببخشید اینم یه تشکر که منو ببخشید

ضمنا تو رو جون جدت یه مثال یا تکست باکس برام بزار که به یه دیتا ست وصل بشه و با autocomplete کار کنه

__H2__
چهارشنبه 13 تیر 1386, 15:35 عصر
سلام
از گفته های مطرح شده در تاپیک اینطور استنباط کردم که میخواهید با هر تایپ کاربر یک دستور LIKE اجرا کنید، اگر اشتباه کردم میبخشید.

خود TextBox مستقیم و هلو وار به چیزی وصل نمیشود ولی میتوان در یک حلقه آیتم ها را خواند و در آن ریخت که البته سرعت خیلی بالایی دارد:
این کد شاید کمی طولانی باشد ولی سرعت خوبی دارد


System.Windows.Forms.AutoCompleteStringCollection col=this.TextBox1.AutoCompleteCustomSource;

using (System.Data.SqlClient.SqlConnection dbCon= new System.Data.SqlClient.SqlConnection(""))
{
System.Data.SqlClient.SqlCommand dbCom = new System.Data.SqlClient.SqlCommand("Select [StringField] FROM [TableName] WHERE (ISNULL([StringField],'')<>'')", dbCon);
dbCon.Open();
using (System.Data.SqlClient.SqlDataReader dbDr = dbCom.ExecuteReader())
{
while (dbDr.Read()){
col.Add(dbDr.GetString(0));
}
}
}


و اگر dt یک DataTable پرشده باشد میتوان این کد سه خطی را هم استفاده کرد


foreach (System.Data.DataRow dr in dt.Rows){
this.TextBox1.AutoCompleteCustomSource.Add(dr[0].ToString());
}


و البته دو خصیت TextBox هم باید به این ترتیب ست شده باشند


this.TextBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.TextBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSour ce;


راستی جد بیچاره منو از کجا میشناسید؟؟؟؟؟؟؟؟!!!!!!! (شوخی کردم!)
موفق باشید، برادار!!!