PDA

View Full Version : حرفه ای: سرچ کارکتر به کارکتر در دیتابیس



Mohandes2009
سه شنبه 16 خرداد 1391, 14:28 عصر
یک دیتا بیس دارم که یه تعداد اسم فارسی در رکوردهاش ذخیره شده است
حالا یه تکست باکس رو صفحه دارم که میخوام وقتی مثلا م را زدم هر چی کلمه هست تو یه ستون خاص از اون جدول که م داخلش است را برام در یک لیست باکس اضافه کنه و با هر بار اضافه شدن به حرف م مثلا مص اون لیست باکس ویرایش بشه و یه تعدادش کم بشه



به زبان سی شارپ و با استفاده از Linq

شاپرک
سه شنبه 16 خرداد 1391, 14:50 عصر
خوب بايد در رويداد TextChanged مربوط به اون تكست باكست اطلاعات مربوط به DataGridView رو فيلتر كني.

Mohandes2009
دوشنبه 22 خرداد 1391, 08:20 صبح
خوب بايد در رويداد TextChanged مربوط به اون تكست باكست اطلاعات مربوط به DataGridView رو فيلتر كني.

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


private void txtName_TextChanged(object sender, EventArgs e)
{
if (txtName.Text == "")
{
lsbName.Visible = false;
}
else
{
try
{
lsbName.Items.Clear();

string test = txtName.Text;
var q = from c in linq.TCoustomers
where c.Name.Substring(0, txtName.Text.Length) == test
select c.Name ;
foreach (string item in q)
{
lsbName.Items.Add(item.ToString());
}

if (lsbName.Items == null)
{
lsbName.Visible = false;
}
else
{
lsbName.Visible = true;
}
}
catch { }
}
}

Saeed_m_Farid
دوشنبه 22 خرداد 1391, 11:39 صبح
جسارتاً میدونین با این کد چه بلایی سر منابع سیستم میاد؟ اگه یکی دیگه بود من کاری نداشتم، ولی چون میدونم برنامه های شما میرسه دست مشتری، مهمه که پدر سیستمشون رو درنیاره!

اگه اطلاعات مشتریاتون کمه که هیچ! ولی کلاً Suggestion برای داده های زیاد اصلاً صلاح نیست؛ در مورد کد شما، با هر تعییری روی txtName تمام اون کارها باید انجام بشن، اگه جدول مشتریاتون زیاد نه، مثلآً 100K داده داشته باشه، علاوه بر واکشی و یه foreach گنده! تمام اون Visible اینا هم باید اعمال بشن؛ اگه نظر من رو بپرسید، یک txtName و همون خاصیت AutoCompleteCustomSource و تنظیماتش خیلی بهتر از دو تا کنترل برای اینکار هست، مثلاً یه کدی مثل این:

txtName.AutoCompleteCustomSource.AddRange(
(from row in linq.TCoustomers
where row.Name.Contains(txtName.Text)
select row.Name).ToArray());

(AutoCompleteMode رو روی SuggestAppend بذارین، AutoCompleteSource هم CustomSource) البته من این کد رو تست نکردم، ولی بنظرم از اونهمه کار بهتر هست ...
ضمناً شما که از لینک استفاده میکنین از امکاناتی که برای Anonymous types براتون فراهم میکنه هم میتونید استفاده کنید (ToList، ToArray و ...)
==============
Background:
یه ابزاری هست برای عملکرد و مشخصات حافظه و پردازنده و ... برنامه های دات نت: JetBrains dotTrace (http://www.jetbrains.com/profiler/)
من خیلی قبولش دارم و تو برنامه های تجاری بدرد میخوره، باهاش کدهایی که می نویسین رو تست کنید و ببینید چقدر تو کارایی فرق می کنن، فقط همینکه کارمون راه بیافته که نیست ....

موفق باشید.

Mohandes2009
سه شنبه 23 خرداد 1391, 10:50 صبح
جسارتاً میدونین با این کد چه بلایی سر منابع سیستم میاد؟ اگه یکی دیگه بود من کاری نداشتم، ولی چون میدونم برنامه های شما میرسه دست مشتری، مهمه که پدر سیستمشون رو درنیاره!

اگه اطلاعات مشتریاتون کمه که هیچ! ولی کلاً Suggestion برای داده های زیاد اصلاً صلاح نیست؛ در مورد کد شما، با هر تعییری روی txtName تمام اون کارها باید انجام بشن، اگه جدول مشتریاتون زیاد نه، مثلآً 100K داده داشته باشه، علاوه بر واکشی و یه foreach گنده! تمام اون Visible اینا هم باید اعمال بشن؛ اگه نظر من رو بپرسید، یک txtName و همون خاصیت AutoCompleteCustomSource و تنظیماتش خیلی بهتر از دو تا کنترل برای اینکار هست، مثلاً یه کدی مثل این:

txtName.AutoCompleteCustomSource.AddRange(
(from row in linq.TCoustomers
where row.Name.Contains(txtName.Text)
select row.Name).ToArray());

(AutoCompleteMode رو روی SuggestAppend بذارین، AutoCompleteSource هم CustomSource) البته من این کد رو تست نکردم، ولی بنظرم از اونهمه کار بهتر هست ...
ضمناً شما که از لینک استفاده میکنین از امکاناتی که برای Anonymous types براتون فراهم میکنه هم میتونید استفاده کنید (ToList، ToArray و ...)
==============
Background:
یه ابزاری هست برای عملکرد و مشخصات حافظه و پردازنده و ... برنامه های دات نت: JetBrains dotTrace (http://www.jetbrains.com/profiler/)
من خیلی قبولش دارم و تو برنامه های تجاری بدرد میخوره، باهاش کدهایی که می نویسین رو تست کنید و ببینید چقدر تو کارایی فرق می کنن، فقط همینکه کارمون راه بیافته که نیست ....

موفق باشید.

دوست من خیلی خیلی تشکر بابت وقتی که در این پست گذاشتی من ToList، ToArray را استفاده کردم اما نشده!!

میشه شما کد کامل و مورد قبول را بزارید؟

و درسته فقط اجرا شدن کد نیست... قبول دارم!

rasoolf
سه شنبه 23 خرداد 1391, 13:04 عصر
سلام دوست عزیز شما میتونید هم از روش linq که مهندس Saeed_m_farid اشاره کردند استفاده کنی



txtName.AutoCompleteCustomSource.AddRange(
(from row in linq.TCoustomers
where row.Name.Contains(txtName.Text)
select row.Name).ToArray());




هم میتونی داخل رویداد TextChanged مربوط به Textbox به دیتابیس خودت وصل شی و کد select رو به صورت زیر وارد کنی و نتیجه رو داخل دیتاگرید قرار بدی




"Select * from TableName Where Fieldname '%" + textBox1.Text + "%'"

اینم یه مثال کوچولو



private void textBox1_TextChanged(object sender, EventArgs e)
{
OleDbConnection oleCon = new OleDbConnection();
OleDbDataAdapter OAdapter = new OleDbDataAdapter();
DataSet Ds = new DataSet();
oleCon = new OleDbConnection(StrCon);
OAdapter = new OleDbDataAdapter("Select * from TableName Where Fieldname like '%" + textBox1.Text + "%'", oleCon);
Ds = new DataSet();
oleCon.Open();
OAdapter.Fill(Ds,"TableName");
DtInformtion.DataSource = Ds;
DtInformtion.DataMember = "TableName";
oleCon.Close();


}
:لبخندساده: