PDA

View Full Version : جستجو بین رکورد های دیتاگرید مثل دستور Like در SQL



saeed zarei
چهارشنبه 28 فروردین 1392, 21:39 عصر
سلام
من برنامه ای نوشتم که تحت شبکه هست و اطلاعات رو داخل دیتا گرید واکشی و نمایش میدم . حالا میخوام کاربر با وارد کردن متن در یه باکس رکوردهایی از دیتاگرید که اون متن داخلشون هست رو فقط نشون بده . یعنی نیاز نباشه من با دستور Like دوباره اطلاعات رو از بانک واکشی کنم و پهنای باند شبکه رو بیخود بگیرم
با تشکر

veniz2008
چهارشنبه 28 فروردین 1392, 22:02 عصر
سلام.
نیازی به واکشی دوباره اطلاعات نیست. کافیه دیتاتیبل رو فیلتر کنید. مثلا در رویداد textchanged مربوط به تکست باکس میتونی دیتاتیبل رو بصورت زیر فیلتر کنی:

private void TxtUserName_TextChanged(object sender, EventArgs e)
{
dt.DefaultView.RowFilter = "UserName LIKE '%" + TxtUserName.Text + "%'";
dataGridView1.DataSource = dt;
}

saeed zarei
پنج شنبه 29 فروردین 1392, 05:40 صبح
ممنون از راهنماییتون . من دارم اطلاعات رو با EF واکشی میکنم و خروجی اون یه لیست جنریک هست . چطور میشه اون لیست رو فیلتر کرد ؟
برای تبدیل لیست به دیتاتیبل راهی هست ؟ سرچ کردم نوشته بودن باید بیای با یه حلقه کل اطلاعات رو بریزی تو دیتاتیبل ، فکر نکنم این تنها راه باشه ، چون برای رکوردهای زیاد وقت گیر میشه
شما راهی به نظرتون میرسه ؟

aghayex
پنج شنبه 29 فروردین 1392, 07:08 صبح
دوست عزیز فکر نکنم کار معقولی باشه که بیای تمام دادههاتو در برنامه لود کنید و م تونی از پی جینگ استفاده کنی و در هر لحظه مقدار معینی از داده ها رو واکشی می کنی و ترافیکی هم ایجاد نمیشه

saeed zarei
پنج شنبه 29 فروردین 1392, 07:09 صبح
برای اینکه بتونید لیستی که توسط EF واکشی کردید رو با تغییرات یه باکس فیلتر کنید میتونید از کد زیر استفاده کنید :
این کد تو لود برنامه نوشته شده :

lst = dEntities.S_All_Tafzil().ToList();
dataGridView1.DataSource = lst;
نوع های زیر هم در ابتدای برنامه تعریف شدن :
DB_FadakEntities dEntities = new DB_FadakEntities();
List<S_All_Tafzil_Result> lst;
List<S_All_Tafzil_Result> lst2;

حالا تو رویداد TextChange مربوط به باکسی که میخواید دیتاگرید یا همون لیستتون طبق متن داخلش فیلتر بشه این کد رو بنویسید :
lst2 = lst.Where(t => t.text.Contains(textBox1.Text)).ToList();
dataGridView1.DataSource = lst2;