PDA

View Full Version : جستجو در دیتاگرید به طوری که مکان اون کلمه نشان داده شود



mohamadmjk
سه شنبه 30 آبان 1385, 21:28 عصر
چه طوری میشه توی دیتاگرید جستجو کرد طوری که مکان اون عنصر توی جدول نشون داده بشه یعنی مثلا اگه حرف 'م' رو زدم ابتدای کلماتی که با م شروع میشه وایسه و همینطور تا آخر یعنی همون کاری که دستور locate توی دلفی انجام میده.

ممنون...

mohamadmjk
سه شنبه 07 آذر 1385, 20:36 عصر
بابا ایول پس کجایید شماها که میگید فقط C#?????????????????????????????

hdv212
چهارشنبه 08 آذر 1385, 22:34 عصر
با سلام
شما در رویداد Textbox_TextChanged بایستی یک پرس و جو تعریف کنی و با دستور OEDER و پاس کردن Textbox1.text به عنوان آرگومان آن مشکلتون حل میشه .
را دیگه استفاده از آیجکت DataView هست که میتونید پروپرتی Sort اون را با متن داخل تکس باکستون ست کنید . فکر کنم این دو راه کافی باشه .
برای تمام سوالات شما سی شارپ راهی رو داره ولی اگر مشکل شما حل نمیشه ..مشکل از دانش ماست نه سی شارپ . موفق باشید

mohamadmjk
دوشنبه 13 آذر 1385, 18:17 عصر
ممنون از جوابتون ولی من تازه کارم میشه یک نمونه بگذارید. البته اگه لطف کنید

hdv212
پنج شنبه 16 آذر 1385, 01:36 صبح
در رویداد textbox1_textchanged این پرس و جو رو وارد کنید . (البته باید پرس و جوی مربوط به خودتونو بنویسید. این فقط یک مثال هست):
sqlDataAdapter1.SelectCommand.CommandText = "select * from myTable where field_1 like %"+textbox1.text+"%";
موفق باشید

mohamadmjk
جمعه 17 آذر 1385, 16:45 عصر
از جوابتون ممنون ولی این کد داده ها رو فیلتر می کنه
ولی من می خوام همه داده ها باشند و روی عنصر مورد نظر بایسته

PC2st
جمعه 17 آذر 1385, 17:44 عصر
یکی از دیگر راه حلها، اینه که در فیلد مربوط در تک تک رکوردها search کنی و ببینی که کدومشون با M شروع شده... مثلا با فرض اینکه فیلد Name دارای ایندکس 0 باشد، به کد زیر دقت کنید:



1. for(int i = 0; i < dataGridView1.RowCount - 1; i++)
2. {
3. if(dataGridView1.Rows[i].Cells[0].Value.ToString().Substring(0, 1).ToUpper() == "M")
4. {
5. dataGridView1.CurrentCell = dataGridView1[0, i];
6. break;
7. }
8. }


که در فوق، مراحل کار به این شکل هست که در دستور for، شمارنده i از ایندکس 0 شروع و به آخرین رکورد پر، ختم میشود.
سپس در خط سوم: اگر مقدار فیلد Name (ایندکس 0) از رکورد i ام جدول، با کلمه M (چه بزرگ چه کوچک) شروع شده باشد، برنامه خط پنجم رو اجرا میکنه که در خط پنجم، فیلد Name از رکورد i ام بصورت انتخاب شده برای کاربر نمایش داده میشود. سپس در خط بعد، از حلقه for خارج میشود.
اگر دوست داشتید که برنامه رکوردهای بعدی را مورد بررسی قرار بدهد، باید ادامه جستجو را از رکورد i+1 شروع کنید (این رو در کد فوق ننوشتم و کد فوق تنها فیلد Name اولین رکوردی رو نمایش میده که با M شروع شده و کاری به بقیه رکوردها نداره)

leG_big
جمعه 17 آذر 1385, 18:16 عصر
دوستان ممنون ، شما ها کجا بودید و ما گرد جهان بودیم !!!!
دوست دار شما

mohamadmjk
شنبه 18 آذر 1385, 22:32 عصر
از همه دوستان ممنون
یه مشکلی هست و اون اینکه برنامه من تقریبا 100هزار تا رکورد داره به نظر شما جستجو با for توی جدول یه کار وقت گیر برای سیستم های پایین نیست؟ به خصوص اگه تحت شبکه باشه؟
اگه کسی یه راه حل بهتر داره کمک کنه

PC2st
یک شنبه 19 آذر 1385, 16:08 عصر
البته اگر میخوای جستجو خیلی سریعتر انجام بشه، میتونی جدول بانک اطلاعاتی رو بر اساس فیلد مورد نظر مرتب کنی، بعد از اینکه یکبار مرتب شد، به هر چند تعداد که خواستی میشه جستجو توش انجام داد ولی به شیوه دودوئی یا به هر شیوه سریعتر دیگه!

در روش دودوئی (که روی اطلاعات مرتب شده صورت میگیره) ابتدا رکورد وسط (رکورد 500 ام) رو مورد شرط قرار میدیم اگه حرف اولش، حرف قبل از M بود، به رکورد 750 میرویم اما اگه بعد از M بود، به رکورد 250 ام میریم و شرط رو اعمال میکنیم. حالا اگه فرض کنیم که حرف اول فیلد 500 ام، K باشه، باید به رکورد 750 رفته و ببینیم حرف اول مقدار فیلد رکورد 750 چیه؟ اگر اونهم حرف اولش P بود، باید به رکورد مابین 500 و 750 یعنی 2/(750+500) یعنی رکورد 625 رفت و دید که حرف اول فیلدش چیه؟ حالا فرض کنیم که حرف اول فیلدش N باشه، پس باید به رکورد مابین 500 و 625 یعنی 562.5 رفت! اعشار شد! اشکالی نداره، به یک رکورد قبل یا بعدش میریم (یا هر دو رکورد قبل و بعدش رو بررسی میکنیم!!!!) اون رو بررسی میکنیم که حرف اولش چیه؟ و مثلا حرف اول فیلدش همون M میشه و ... البته برنامه، اولین رکوردی که حاوی حرف M است رو میخواد، پس باید رکورد قبلش هم مورد بررسی قرار بگیره... (اگه میخواستیم به روش قبلی، اطلاعات رو مورد جستجو قرار بدیم، باید تاحالا 562 رکورد رو میگشتیم!)

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

iman_pc_love
یک شنبه 19 آذر 1385, 16:19 عصر
البته زیادم نیست 100 هزار که چیزی نیست :D

mohamadmjk
سه شنبه 21 آذر 1385, 21:32 عصر
از همتون ممنون
PC2st.ir عزیز فکر کنم منظورتون از روش سریعتر جستجوی درختی باشه (;