PDA

View Full Version : جستجو در textbox هنگام textchange



behzadk
پنج شنبه 24 اردیبهشت 1388, 18:54 عصر
با سلام
می دونم این سوال تکراری است اما سوال من یه کم فرق داره پس خواهش می کنم که پاک نکنین
یه textbox داریم که می خوایم هر وقت کاربر تایپ می کنه بر اساس اون جستجو بکنو و نتیجه رو در datagridview نمایش بده راه حلی که برای این کار ارائه دادن این است که از autocomplate استفاده کنیم این در صورتی است که table ما دارای تعداد محدودی مقدار باشه که بتونیم automocplate استفاده کنیم و از طرفی تعداد رکورد ها در table بسیار زیاد خواهد بود شاید به 1 میلیون هم برسه و از طرفی جستجو کاملا دینامیک است که بر اساس فیلدی که کاربر از روی datagridview انتخاب می کنه انجام می شه و در این حالت امکان داره که کاربر یه لحظه کد رو انتخاب کنه و یه لحظه عنوان و... پس با این فرض هم autocompalte هم منتفی است
حالا من چه جوری می تونم این جستجو رو با بهترین کارایی بنویسم و طراحی کنم در ضمن برنامه تحت شبکه می باشد و تعداد نسخه هایی که از database استفاده می کننن احتمال دارد به 100 عدد برسد
با تشکر از همه

behzadk
پنج شنبه 24 اردیبهشت 1388, 22:35 عصر
پس چرا کسی جواب نمی ده؟

zahra111
پنج شنبه 24 اردیبهشت 1388, 22:51 عصر
به نظر من می تونی تو رویداد TextChange از کد Like مربوط به sql استفاده کنید. البته نمی دونم با رکوردهای زیادی که دارید چقدر رو سرعت تاثیر داره.

hsmfaridmehr
پنج شنبه 24 اردیبهشت 1388, 22:51 عصر
این چیزی که من تو برنامه هام استفاده می کنم

توی کد زیر SelectCommand رو تعیین میکنم


privatestring SelectData()
{
string selectCommand = null;
if (_customerID != 0)
{
selectCommand += " AND CustomerID = " + _customerID;
}
if (_firstName != null)
{
selectCommand += " AND FirstName LIKE '" + _firstName + "%'";
}
if (_lastName != null)
{
selectCommand += " AND LastName LIKE '" + _lastName + "%'";
}
if (_address != null)
{
selectCommand += " AND Address LIKE '" + _address + "%'";
}
if (_phoneNumber1 != null)
{
selectCommand += " AND PhoneNumber1 LIKE '" + _phoneNumber1 + "%'";
}
if (_phoneNumber2 != null)
{
selectCommand += " AND PhoneNumber2 LIKE '" + _phoneNumber2 + "%'";
}
if (_customerDetail != null)
{
selectCommand += " AND CustomerDetail LIKE '" + _customerDetail + "%'";
}
if (_customerSince != null)
{
selectCommand += "AND CustomerSince LIKE '" + _customerSince + "%'";
}
if (selectCommand != null)
{
return selectCommand.Remove(0, 4);
}
returnnull;
}


و توی این هم از SelectCommand ساخته شده واسه گرفتن اطلاعات استفاده میکنم


publicDataTable GetData()
{
OleDbCommand command = newOleDbCommand();
OleDbDataAdapter customerDataAdapter = newOleDbDataAdapter();
DataTable dt = newDataTable();
try
{
connection.Open();
command.Connection = connection;
string selectCommand = SelectData();
if (selectCommand != null)
{
selectCommand = "WHERE " + selectCommand + " ORDER BY CustomerID ASC";
}
else
{
selectCommand = "ORDER BY CustomerID ASC";
}
command.CommandText = "SELECT Customer.CustomerID AS [ ], FirstName AS ," +
" LastName AS [ ], Address AS , PhoneNumber1 AS [ 1], PhoneNumber2 AS [ 2]," +
" CustomerDetail AS , CustomerSince AS [ ] FROM Customer " + selectCommand;
customerDataAdapter.SelectCommand = command;
customerDataAdapter.SelectCommand.ExecuteNonQuery( );
customerDataAdapter.Fill(dt);
return dt;
}
catch
{
returnnull;
}
finally
{
connection.Close();
command.Dispose();
customerDataAdapter.Dispose();
dt.Dispose();
}
}

behzadk
پنج شنبه 24 اردیبهشت 1388, 23:35 عصر
با تشکر از راهنمایی شما
مشکل بنده اینه که تعداد رکورد های جدول ما بسیار زیاد است و تنوع جستجو هم زیاد است در ضمن
دوست عزیز آقای hsmfaridmehr (http://barnamenevis.org/forum/member.php?u=94097) وقتی که شما با عملگر like کار می کنین اگر dataی ورودی تون هم null باشه error نمی ده پس بهتر ه که اون if ها رو برداری تا خوانایی برنامه شما هم بیشتر بشه و هم سرعت برنامه شما بهتر بشه

hsmfaridmehr
جمعه 25 اردیبهشت 1388, 01:30 صبح
کاملا درست میگی مرسی