سلام وقت به خیر
دوستان من دارم یک برنامه ویندوزی تحت شبکه می نویسم که داخلش یک بخش جستجو قرار دادم که عملیات جستجو رو به ازای ورود هر حرف در تکست باکس انجام میده :
private void txtSearch_TextChanged(object sender, EventArgs e)
{
Searching...
}
در پروژه های گذشتم کوئری جستجو رو مستقیما روی دیتابیس اعمال می کردم و نتیجه رو در دیتاگریدویو نمایش میدادم
و چون برنامه تک کاربره بود، دفعات اتصال بالا به دیتابیس مشکلی ایجاد نمی کرد (به ازای ورود هر حرف توسط کاربر، یک بار اتصال به دیتابیس و اعمال کوئری جستجو)
اما خب همونطور که خودتون می دونید این تکنیک، از لحاظ فنی ارزش بسیار پایینی داره...
در پروژه ی جدیدم چون برنامه چند کاربره و تحت شبکه هست میخوام از روش اصولی تر که خواندن یک بار اطلاعات از دیتابیس و اعمال کوئری جستجو روی دیتاست هست استفاده کنم (دوستان اگر تکنیک بهتری مدنظرتون هست مطرح کنید لطفا)
اما مشکلم اینجاست که بعد از اعمال جستجو روی دیتاست و گرفتن نتیجه در یک آرایه ی رکورد، نمی تونم اون رو در دیتا گرید ویو نمایش بدم. از تکنیک های زیر استفاده کردم ولی به نتیجه نرسیدم
اول سعی کردم به صورت دستی یه جدول به دیتاست اضافه کنم و رکوردها رو به اون جدول اضافه کنم که نشد :
private void txtSearch_TextChanged(object sender, EventArgs e)
{
DataRow[] resultRows = ds.Tables["tblVisitant"].Select("Name Like '%S%' ");
DataTable dt = new DataTable("tblSearch");
dt = ds.Tables["tblVisitant"].Clone();
ds.Tables.Add(dt);
foreach (DataRow row in resultRows)
ds.Tables["tblSearch"].Rows.Add(row);
dgvMain.DataBindings.Clear();
dgvMain.DataBindings.Add("DataSource", ds, "tblSearch");
}
خطایی که در رابطه با کد بالا داد :
1.PNG
بعد سعی کردم نتیجه رو در یک جدول مستقل بریزم باز هم نشد :
private void txtSearch_TextChanged(object sender, EventArgs e)
{
DataRow[] resultRows = ds.Tables["tblVisitant"].Select("Name Like '%س%' ");
DataTable dt = new DataTable("tblSearch");
dt = ds.Tables["tblVisitant"].Clone();
foreach (DataRow row in resultRows)
dt.Rows.Add(row);
dgvMain.DataSource = dt;
}
خطایی که در رابطه با کد بالا داد :
2.PNG
دوستان عزیز ممنون میشم در این رابطه من رو راهنمایی کنید و ایراد روش های بالا رو هم توضیح بدید
خیلی ممنون