PDA

View Full Version : قرار دادن فیلتر برای دیتاگرید ویو



sajad_3dmax
شنبه 16 خرداد 1394, 14:03 عصر
با سلام خدمت همه دوستان گرامی
بنده با استفاده از DataView یک فیلتر برای DataGridView موجود در فرم قرار داده ام. که مثلا اگر داخل textBox بالای فرم حرف "ی" رو تایپ کردم با استفاده از DataView فیلتر مربوطه رو اعمال میکنه و تو دیتاگریدویو تنها رکوردهایی رو نشون میده که حرف "ی" رو داشته باشند.
مشکل اینه که به محض اعمال فیلتر ترتیب ستونهای DataGridView به هم میخوره و از اسامی فارسی که بنده برای اون تنظیم کردم استفاده نمیکنه و اسم "ستون" رو قرار میده. خواهشا راهنمایی و کمکم کنین.
با تشکر
راستی من فقط تو خاصیت DataSource دیتاگرید اسم شی DataView رو قرار دادم و خاصیت dataMember رو مقدار دهی نکرده ام.
کدهاش هم تقریبا به این صورته:

dv.rowfilter="columnName=textbox1.text";
dgv.datasource=dv;

winner1
شنبه 16 خرداد 1394, 14:19 عصر
خوب اشتباه شما اینجاست که بعد فیلتر دوباره به دیتا گیرد دیتا سورس میدی از کد زیر استفاده کن

(dgv.DataSource as DataView).RowFilter="Column_Name"+textBox1.Text

sajad_3dmax
یک شنبه 17 خرداد 1394, 07:21 صبح
خوب اشتباه شما اینجاست که بعد فیلتر دوباره به دیتا گیرد دیتا سورس میدی از کد زیر استفاده کن

(dgv.DataSource as DataView).RowFilter="Column_Name"+textBox1.Text


مهندس کد من در کل بصورت زیر شد
dataview dv =new dataview(dataset1.tables[0]);
(dgv.DataSource as DataView).RowFilter="Column_Name like N' *"+textBox1.Text+"*";
اما نهایتاً باعث بروز استثناء زیر شد.
عنوان استثناء
nullReference Exception was unhandled
متن استثناء
object reference not set an instance of an object.

sajad_3dmax
یک شنبه 17 خرداد 1394, 11:09 صبح
دوست عزیز خواهشا راهنمییم کنید.

Javad_raouf
یک شنبه 17 خرداد 1394, 13:21 عصر
اگر درست متوجه شده باشم
فکر کنم
dgv.DataSource شما NULL باشه و این به خاطر اینه که شما دیتاگریدویوتون رو دستی پر کردید و دیتاسورس نداره
حتی اگر دستی هم بخواید دیتاگریدویور رو پر کنید باز هم می تونید از دیتا سورس استفاده کنید
به منظور این کار دیتاگریدویو شما ابتدا باید خالی از ستون و سطر باشه
و به جای ایجاد ستون و سطر به طور مستقیم در دیتاگریدویو یک DataTable بسازید و سطر و ستون هاتون رو توی اون اضافه کنید
و سپس سطر ها رو هم به DataTable اضافه کنید
DataTable dt = new DataTable();
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Columns.Add("ColumnN");

dt.Rows.Add("Value1", "Value2", "ValueN");

حالا برای ربط دادن این DataTable به دیتاگرید به یک DataView نیاز دارید:
DataView dv = new DataView(dt);
dgv.DataSource = dv;


حالا می تونید برای فیلتر کردن از این روش استفاده کنید:
(dgv.DataSource as DataView).RowFilter = "Column1" + textBox1.Text;

یا اصلا به طور مستقیم اینجوری بنویسید:
dv.RowFilter = "Column1" + textBox1.Text;

امیدوارم مشکل رو درست حدس زده باشم

winner1
یک شنبه 17 خرداد 1394, 14:11 عصر
رفیق به این خاطره که به سورس دیتا گریدت دیتا تیبل دادی نه دیتا ویو تو جایی که به دیتاگریدت سورس میدی

DataTable dtList=new DataTable()
this.dgv.DataSource=new DataView(dtList)