PDA

View Full Version : فیلتر کردن datagrid بوسیله text box



hesabres
شنبه 27 آبان 1391, 15:33 عصر
سلام بر همگی من یک دیتا گرید دارم دو تا فیلد نام و نام خانوادگی داره حالا میخوام بوسیله دو تکست باکس زیرش فیلترینگ انجام بدم

روی تکست باکس اول این کد رو وارد کردم

private void textBox1_TextChanged (object sender, EventArgs e)
{
System.Data.OleDb.OleDbConnection ocn = new System.Data.OleDb.OleDbConnection();
System.Data.OleDb.OleDbCommand ocm = new System.Data.OleDb.OleDbCommand();
System.Data.OleDb.OleDbDataAdapter oda = new System.Data.OleDb.OleDbDataAdapter();
DataTable dt = new DataTable();

ocn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:/db12.accdb";

ocm.Connection = ocn;
ocm.CommandText = "SELECT * FROM nf where family like '%" + textBox1.Text + "%'" ;
oda.SelectCommand = ocm;
oda.Fill(dt);

dg1.DataSource = dt;

dt.Dispose();
oda.Dispose();
ocm.Dispose();
ocn.Dispose();
}

و روی تکست باکس دومی

private void textBox2_TextChanged_1(object sender, EventArgs e)
{
System.Data.OleDb.OleDbConnection ocn = new System.Data.OleDb.OleDbConnection();
System.Data.OleDb.OleDbCommand ocm = new System.Data.OleDb.OleDbCommand();
System.Data.OleDb.OleDbDataAdapter oda = new System.Data.OleDb.OleDbDataAdapter();
DataTable dt = new DataTable();

ocn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:/db12.accdb";

ocm.Connection = ocn;
ocm.CommandText = ("SELECT * FROM nf where name like '%" + textBox2.Text + "%'") ;

oda.SelectCommand = ocm;
oda.Fill(dt);

dg1.DataSource = dt;

dt.Dispose();
oda.Dispose();
ocm.Dispose();
ocn.Dispose();
}

مشکلم این هست که من میخوام هر دو تا با هم چک بشه اینجوی هر کدوم از اینها کاره خودشونو انجام میدن میخوام مثلا تکست باکس دو با توجه به فیلترینگ تکست باکس 1 کارش رو انجام بده

با تشکر

mhq1368
شنبه 27 آبان 1391, 16:13 عصر
سلام
طبق کد زیر عمل کن


da = new SqlDataAdapter("select * from tbl_person inner join tbl_tel" +
" on tbl_person.person_code=tbl_tel.person_code where tbl_person.person_name Like N'%" + name +
"%' and tbl_person.person_family Like N'%" + family + "%'", con);
da.Fill(ds, "view1");



این کد رو اگه تو دوتا تکست باکست کپی کنی باعث میشه که هم براساس اسم و هم براساس فامیل جستجو کنه

ma.rad
شنبه 27 آبان 1391, 16:18 عصر
ابتدا یه متد ایجاد کنید مثل این:

private void Search()
{
System.Data.OleDb.OleDbConnection ocn = new System.Data.OleDb.OleDbConnection();
System.Data.OleDb.OleDbCommand ocm = new System.Data.OleDb.OleDbCommand();
System.Data.OleDb.OleDbDataAdapter oda = new System.Data.OleDb.OleDbDataAdapter();
DataTable dt = new DataTable();

ocn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:/db12.accdb";

ocm.Connection = ocn;
ocm.CommandText = ("SELECT * FROM nf where Family like '%' + textBox1.Text + "%'
and name like '%' + textBox2.Text + "%'" ) ;

oda.SelectCommand = ocm;
oda.Fill(dt);

dg1.DataSource = dt;

dt.Dispose();
oda.Dispose();
ocm.Dispose();
ocn.Dispose();
}


و تو TextBox ها متد رو فراخوانی کنید.

Search();

mhq1368
شنبه 27 آبان 1391, 16:22 عصر
درسته ولی قبل از غلامت % یه علامت N بزار واسه حروف فارسی که ایراد نگیره

ali_habibi1384
شنبه 27 آبان 1391, 16:22 عصر
لازم نيست دستور SQL بنويسي با استفاده از خود ديتا تيبل كه اطلاعات تيبلت توش هست ميتوني اينكارو انجام بدي. بايد توجه كني كه رشته جستجو بر اساس پر يا خالي بودن تكست باكسها تغيير ميكنه مثلا وقتي يكي خالي باشه ديگه نبايد AND يا OR بذاري . متد زير ميتوني بدون استفاده از كانكشن ارتباط با SQL جستجو كني:
Datatable1.DefaulyView.Rowfilter = "YourFiled = '" + TxtSearch.text +"'"

Sirwan Afifi
شنبه 27 آبان 1391, 22:03 عصر
لازم نیست برای وارد کردن هر کاراکتر از دیتابیس Fetch کنید بهترین راه فیلتر کردن اطلاعات داخل DataTableه از همون روشی که ali_habibi1384 فرمودن می تونید استفاده کنید.

hesabres
یک شنبه 28 آبان 1391, 13:18 عصر
لازم نيست دستور SQL بنويسي با استفاده از خود ديتا تيبل كه اطلاعات تيبلت توش هست ميتوني اينكارو انجام بدي. بايد توجه كني كه رشته جستجو بر اساس پر يا خالي بودن تكست باكسها تغيير ميكنه مثلا وقتي يكي خالي باشه ديگه نبايد AND يا OR بذاري . متد زير ميتوني بدون استفاده از كانكشن ارتباط با SQL جستجو كني:
Datatable1.DefaulyView.Rowfilter = "YourFiled = '" + TxtSearch.text +"'"

سلام عرض شد خدمت شما و ممنونم از لطفت دوست من

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

یک اینکه برنامه خطای زیر را دارد
Error 1 'System.Windows.Forms.DataGridView' does not contain a definition for 'DefaulyView' and no extension method 'DefaulyView' accepting a first argument of type 'System.Windows.Forms.DataGridView' could be found (are you missing a using directive or an assembly reference?) E:\c# project\daneshjoo11\daneshjoo11\Form1.cs 135 17 daneshjoo11

دوم اینکه من کد شما رو به این شکل نوشتم
dg1.DefaulyView.Rowfilter = "name = '" + textBox1.Text + "' and family = '" + textBox2.Text + "'";
و در هر دو تکست باکس کپی کردم اما باز هم در فیترینگ هر تکست باکس بدون در نظر گرفتن تکست باکس دیگر کاره خودشو انجام میده

mhq1368
یک شنبه 28 آبان 1391, 14:18 عصر
سلام عرض شد خدمت شما و ممنونم از لطفت دوست من

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

یک اینکه برنامه خطای زیر را دارد
Error 1 'System.Windows.Forms.DataGridView' does not contain a definition for 'DefaulyView' and no extension method 'DefaulyView' accepting a first argument of type 'System.Windows.Forms.DataGridView' could be found (are you missing a using directive or an assembly reference?) E:\c# project\daneshjoo11\daneshjoo11\Form1.cs 135 17 daneshjoo11

دوم اینکه من کد شما رو به این شکل نوشتم
dg1.DefaulyView.Rowfilter = "name = '" + textBox1.Text + "' and family = '" + textBox2.Text + "'";
و در هر دو تکست باکس کپی کردم اما باز هم در فیترینگ هر تکست باکس بدون در نظر گرفتن تکست باکس دیگر کاره خودشو انجام میده

خوب شما الان فکر نکن اطلاعاتت کمه فقط یه اسم یا یه فامیل داری
بعدا که اطلاعاتت بیشتر شد همین بدردت میخوره

hesabres
یک شنبه 28 آبان 1391, 19:20 عصر
سلام دوستان

من این کد رو نوشتم و مشکلم با یاری شما دوستان مرتفع شد
dt.DefaultView.RowFilter = "family like '%" + textBox1.Text + "%' and name like '%" + textBox2.Text + "%' ";
dg1.DataSource = dt;
الان مشکلم در حرف " ی " هست از حرف N هم که فرمودید استفاده کردم ولی برنامه خطا گرفت میشه این کد رو با حرف N اصلاح بفرمائید ببینم من کجا اشتباه میکنم من N رو اینگونه بکار بردم برنامه ارور گرفت
dt.DefaultView.RowFilter = "family like N'%" + textBox1.Text + "%' and name like '%" + textBox2.Text + "%' ";
dg1.DataSource = dt;

hesabres
چهارشنبه 01 آذر 1391, 15:21 عصر
نبود کسی از دوستان کمکی کنه ؟