PDA

View Full Version : سوال: جستجو شبیه دستور Like، SQL در DataGridView



s@nb@l
دوشنبه 21 دی 1388, 09:12 صبح
آیا جستجو شبیه دستور Like، SQL در DataGridView امکانپذیر هست؟ نمی خوام جدول فیلتر بشه

مثلا وقتی جستجو بر روی فیلد نام هست و کاربر در TextBox یک کاراکتر را تایپ کرد بر اساس نام مرتب کرده و در هر کجای، مقادیر فیلد نام اونو پیدا کرداون سطر به صورت انتخاب شده نمایش داده بشه

اگه نمونه برنامه دارین لطفا راهنمائیم کنید با تشکر.

saed2006
دوشنبه 21 دی 1388, 09:26 صبح
کامپونت های دیتا گریدی هست که این کار رو انجام میده
کمی جستجو کن به نتیجه میرسی

s@nb@l
دوشنبه 21 دی 1388, 09:30 صبح
آقا saed (http://barnamenevis.org/forum/member.php?u=12545)
با جستجو به نتیجه نرسیدم. لطفا بیشتر راهنمایی کنید
لطف کنید یه نمونه برنامه بذازین

saed2006
دوشنبه 21 دی 1388, 09:54 صبح
کامپونت هایی که هست عمل فیلتر رو انجام میدن
Advanced Data Grid Control اینو جستجو کن

s@nb@l
دوشنبه 21 دی 1388, 17:28 عصر
آقا saed
تو سوالم مطرح کردم که نمی خوام فیلتر شه والا از خود دستور like توی sql می تونم این کارو انجام بدم(در این صورتآیا این خوبه یا کامپوننتی که معرفی کردین؟)
می خوام برای مثال جستجو بر روی فیلد نام ،وقتی کاربر در textbox یک کاراکتر را تایپ کرد کل جدول نمایش داده بشه و اون سطری که مقدار فیلد نامش با اون کاراکتر تایپ شده در textbox شروع شده باشه یا در کاراکترهای دومی اگه نبود کاراکتر سوم و الی آخر رو به صورت انتخاب شده نمایش بده

(SELECT * FROM city WHERE cityName LIKE '%+TextBox.text+"%'")

seven7777777
دوشنبه 21 دی 1388, 21:35 عصر
سلام
شما باید اینکارو با چک کردن یکی یکی ردیف ها انجام بدی تا به اون چیزی که می خوای برسی یعنی :
1. مثلا تو ستون اول دیتاگریدت نام کوچک افراد هست و یک تکست باکس که قراره جستجو برطبق اون باشه .
2. در رویداد OnChange تکست باکست باید بیای و یکی یکی ستون اولتو در هر ردیف چک کنی و به اولین ردیفی که رسیدی که مطابقت داشت ، اون ردیف رو انتخاب کنی ( با dgv.rows[i].selected=true )
3. برای مقایسه می تونی محتوای اون ستونرو با دستور Convert.ToString به متن تبدیل کنی و بعد با توابع رشته مثل StartWith که جملاتی که با یک عبارت خاص شروع میشن یا EndWith که برعکس اونه ، عملیات مقایسه رو انجام بدی .

مورد دیگه ای هم هست . در ضمن من انجام دادم ، جواب داده .

s@nb@l
سه شنبه 22 دی 1388, 08:48 صبح
سلام
ُآقا یا خانم 7
مچکرم از راهنماییتون انشاالله کارم راه بیافته
به نظرتون روش شما از نظر برنامه نویسی بهتره یا دستور Select مربوط به sql که در بالا ذکر کردم.
مورد دیگه چیه ؟

hamid.shekasteh
سه شنبه 22 دی 1388, 15:03 عصر
من فکر می کنم کار شما با یه DataView راه بیفته.مثلا اگر از یک sqlDataAdapter استفاده کنی در رویداد TextChange تکست باکست بنویس:





DataSet ds = new DataSet();
sqlDataAdapter1.Fill(ds);

DataView dv = (ds.Tables[0].DefaultView);

dv.RowFilter = "family LIKE '" + txtSearch.Text + "%'";

dataGridView1.DataSource = dv;

shahab_ss
سه شنبه 22 دی 1388, 15:29 عصر
int _Column = 0;
int _Row = 0;


private void SearchGrid()
{
//maxSearches = the # of cells in the grid
int maxSearches = dgv_Name.Rows.Count * dgv_Name.Columns.Count + 1;
int idx = 1;
bool isFound = false;
string searchValue = txt_Search.Text.ToUpper();

if (Convert.ToBoolean(txt_Search.Text.Length))
{
// If the item is not found and you haven't looked at every cell, keep searching
while ((!isFound) & (idx < maxSearches))
{
// Only search visible cells
if (dgv_Name.Columns[_Column].Visible)
{
// Do all comparing in UpperCase so it is case insensitive
if (dgv_Name[_Column, _Row].Value.ToString().ToUpper().Contains(searchValue))
{
// If found position on the item
dgv_Name.FirstDisplayedScrollingRowIndex = _Row;
dgv_Name[_Column, _Row].Selected = true;
isFound = true;
txtStatus.Text = "Search phrase found!";
}
}

// Increment the column.
_Column++;

// If it exceeds the column count
if (_Column == dgv_Name.Columns.Count)
{
_Column = 0; //Go to 0 column
_Row++; //Go to the next row

// If it exceeds the row count
if (_Row == dgv_Name.Rows.Count)
{
_Row = 0; //Start over at the top
}
}

idx++;
}

// If isFound = false then the phrase has not been found in the grid
if (!isFound)
{
txtStatus.Text = "Search phrase not found!";
}
}
}

شما ابتدا یه TextBox روی فرم اضافه کن ،به اسم "txt_Search" .
اون 2 تا متغیر Int رو هم باید توی فرم داشته باشی.
بعد میتونی این متد رو مثلا توی TextChanged مربوط به "txt_Search" صدا بزنی.

seven7777777
سه شنبه 22 دی 1388, 18:09 عصر
خوب درست تاخیرهای مربوط به هر کدوم رو نمی دونم . اساتید بهتر می دونن . ولی ب این حال فکر می کنم روش دوستمون Projeha خیلی از روش من بهتره . حتما اگه تونستی از اون استفاده کن ، اگه نشد که حتما میشه اون موقع راه های دیگه رو برو .

s@nb@l
پنج شنبه 01 بهمن 1388, 16:35 عصر
سلام
آقا يا خانم Projeha لطفا يه نمونه مثال بذارين

s@nb@l
پنج شنبه 01 بهمن 1388, 16:39 عصر
سلام
آقا Shahab
از روش شما استفاده كردم دستتون درد نكنه
اما يه سوال اينكه آيا مي شه اين جستجو را مختص به يك ستون كرد تا سرعت بالا بره؟ امتحان كردم جواب نداد

shahab_ss
پنج شنبه 01 بهمن 1388, 19:47 عصر
به صورت زیر میتونید سطر های گرید رو جستجو کنید اما روشی که قبلا گفتم بهینه تر هست.انتخاب با خودتون

foreach (DataGridViewRow item in dataGridView1.Rows)
{
if(item.Cells[col1.Name].Value.ToString().EndsWith("value to search"))
// The row is found
}

CYCLOPS
جمعه 02 بهمن 1388, 08:32 صبح
4 تا راهش که الان به ذهنم میرسه :
1 ) همون طور که دوست عزیزمون Projeha گفت از متد RowFilter در DataView استفاده کنی .
2 ) از متد Select مربوط به DataTable مربوطه استفاده کنی که یه آرایه از DataRow برات بر میگردونه .
3 ) از متد Find مربوط به DataView استفاده کنی .
4 ) از متد FindRows مربوط به DataView استفاده کنی .

آدرس ها دقیقه پس کافیه بری سراغ MSDN تا جزئیات و مثال و . . . رو ببینی .
توصیه شخصی خودم هم استفاده از راه دوم هست .
موفق باشی :چشمک:

s@nb@l
دوشنبه 12 بهمن 1388, 11:17 صبح
منم از همون روش 2 استفاده كردم ولي مي خواستم كل جدول نمايش داده بشه و سطر مورد نظر به صورت هاي لايت نمايش داده بشه

shahramap
شنبه 29 تیر 1392, 20:29 عصر
اگه بخوام بر اساس دو شرط فیلتر کنم سطر زیر به چه صورتی میشه؟
dv.RowFilter = "family LIKE '" + txtSearch.Text + "%'";

kazem235
یک شنبه 30 تیر 1392, 01:26 صبح
یه نمونه برات درست کردم.هرچند معقول نیست اما فکر کنم تنها راه باشه.
107635

kazem235
یک شنبه 30 تیر 1392, 01:27 صبح
راستی روی یه برنامه دیگه نوشتم.برای همین اسمش فرق میکنه ولی محتویات همونه که میخوای.

saeedjafari
سه شنبه 04 خرداد 1395, 13:06 عصر
سلام دوستان وقت بخیر
من یه برنامه دارم قسمت سرچش کار نمیکنه
میتونید راهنمایی کنید
با تشکر

لینک پروژه (http://s7.picofile.com/file/8252757276/Ana_Enayati.rar.html)

silver189
سه شنبه 11 خرداد 1395, 11:32 صبح
سلام ، اگه از دیتاگرید استفاده می کنید فقط کافی کد زیر رو بنویسید . البته مقادیر پیش فرض هستش

try
{
((DataTable)dataGridView1.DataSource).DefaultView. RowFilter = string.Format("ReportDate like '%{0}%' or FullName like '%{0}%' ", txtReportSearch.Text.Trim().Replace("'", "''"));
}

catch (Exception) { }