PDA

View Full Version : سوال: فیلتر datagridview



mahlake
چهارشنبه 03 تیر 1394, 13:46 عصر
با سلام خدمت همه مهندسین عزیز
من یه کد برای فیلتر دیتا گرید ویو ام نوشته ام 2 تا مشکل هست
1- کلا کد یک بار اجرا میشه و برای بار دوم ارور میده
2- همون یه بار هم که اجرا میشه هیچ اتفاقی نمیافته یعنی فیلتر انجام نمیشه....
کد و ارور رو امیگذارم امیدوارم که بتونید راهنمایی ام کنید:

ارور به شرح زیر است:

An unhandled exception of type 'System.InvalidCastException' occurred in test.exe


Additional information: Unable to cast object of type 'System.Data.DataView' to type 'System.Data.DataTable'.

کدی هم که نوشته ام این میباشد:

DataTable dt = (DataTable)dataGridView3.DataSource;
DataView afltr = new DataView(dt);
afltr.RowFilter = string.Format("id LIKE '%{0}%'", Convert.ToInt32(textBox2.Text));
dataGridView3.DataSource = afltr;



کلی از صبح دارم میگردم اما هنوز به هیچ نتیجه ای نرسیدم...
ممنون میشم اگر کمک یا راهنمایی ای به بنده کنید...

alireza264
چهارشنبه 03 تیر 1394, 14:19 عصر
سلام
این سوال قبلا چند بار مطرح شده
1- قبل از فیلتر مجدد باید فیلتر قبلی برداشته بشه
2- datable رو فیلتر کن و بریز توی دیتا گرید
3- استفاده از ICollectionView که بهترین روشه

mahlake
چهارشنبه 03 تیر 1394, 14:25 عصر
سلام
این سوال قبلا چند بار مطرح شده
1- قبل از فیلتر مجدد باید فیلتر قبلی برداشته بشه
2- datable رو فیلتر کن و بریز توی دیتا گرید
3- استفاده از ICollectionView که بهترین روشه

مرسی از راهنمایی تون آقا علی رضا... من کل تاپیک های قبلی که مرتبت بود رو خوندم هیچ کس مشکلش مثل من نبود.. تا همینجای کد رو هم با کمک همون تاپیک ها نوشتم...

1- چطور باید این کار رو انجام بدم؟
2-من هر چی سرچ کردم همه دیتا ویو رو فیلتر میکردن کدی برای فیلتر دیتا تیبل نبود... خودمم فکر میکنم که باید اینطور که شما میگید بنویسم اما خوب نمیدونم چطور
3- این که میگید رو نمیدونم چیه اما الان تحقیق میکنم و خبرش رو میدم...

بازم ممنون

mahlake
چهارشنبه 03 تیر 1394, 14:50 عصر
سلام
این سوال قبلا چند بار مطرح شده
1- قبل از فیلتر مجدد باید فیلتر قبلی برداشته بشه
2- datable رو فیلتر کن و بریز توی دیتا گرید
3- استفاده از ICollectionView که بهترین روشه

آقا من درباره گزینه آخر هیچی پیدا نکردم میشه یه کم توضیحات و یه سمپل کد برام لطف کنید و بگذارید

alireza264
چهارشنبه 03 تیر 1394, 16:32 عصر
آقا من درباره گزینه آخر هیچی پیدا نکردم میشه یه کم توضیحات و یه سمپل کد برام لطف کنید و بگذارید

اول یک کلاس ایجاد کن که حاوی فیلد های مورد نظر باشه

public class Person
{
public string Cod_key { get; set; }
public string Fname { get; set; }
public string LName { get; set; }
public string Father { get; set; }
public string LocatLiving { get; set; }
}

یک لیست از روی کلاس بساز
List<Person> listperson = new List<Person>();

listperson رو با دیتاگرید بایند کن و با اطلاعات پرش کن

وبعد با استفاده از ICollectionView باید listperson رو فیلتر کنی

mahlake
چهارشنبه 03 تیر 1394, 19:47 عصر
اول یک کلاس ایجاد کن که حاوی فیلد های مورد نظر باشه

public class Person
{
public string Cod_key { get; set; }
public string Fname { get; set; }
public string LName { get; set; }
public string Father { get; set; }
public string LocatLiving { get; set; }
}

یک لیست از روی کلاس بساز
List<Person> listperson = new List<Person>();

listperson رو با دیتاگرید بایند کن و با اطلاعات پرش کن

وبعد با استفاده از ICollectionView باید listperson رو فیلتر کنی

آقا علیرضا تو رو خدا یه کم بیشتر توضیح بدید من هیچی تا به حال از این چیزایی که میگید رو ندیدم و نشنیدم...
از صبح دارم میگردم رفرنساش رو پیدا کردم و نیم اسپیساش رو هم اضافه کردم..

کدی هم که من نوشتم تا به حال به شرح زیره ولی کار نمیکنه... تو رو خدا هر کی میتونه کمکم کنه این مشکل رو رفع منم کارم حسابی گیره...


private void button17_Click(object sender, EventArgs e)
{
List<Person> listperson = dataGridView3.DataSource as List<Person>;
ICollectionView view = CollectionViewSource.GetDefaultView(listperson);
if (string.IsNullOrEmpty(textBox2.Text))
view.Filter = null;
else
view.Filter = new Predicate<object>((o) => ((Person)o).id.StartsWith(textBox2.Text));

}
public class Person
{
public string id { get; set; }
public string tvd { get; set; }
public string shm { get; set; }
public string shsh { get; set; }
public string plk { get; set; }
public string clr { get; set; }
public string cpn { get; set; }
public string mob { get; set; }
public string shb { get; set; }
public string shs { get; set; }
public string dtv { get; set; }
public string pnb { get; set; }
public string odt { get; set; }
public string dcb { get; set; }
public string cname { get; set; }
public string mnc { get; set; }
public string tnc { get; set; }
public string gng { get; set; }
public string rname { get; set; }
public string frn { get; set; }
public string rsh { get; set; }
public string rcn { get; set; }
public string ptlc { get; set; }
public string add { get; set; }
public string rtn { get; set; }
public string gpn { get; set; }
public string dcs { get; set; }
public string dgd { get; set; }
public string dct { get; set; }
public string emza { get; set; }
}

alireza264
چهارشنبه 03 تیر 1394, 21:40 عصر
سلام
روش فیلتر


ICollectionView collectionView = CollectionViewSource.GetDefaultView(listperson);

if (String.IsNullOrEmpty(textBox2.Text))
collectionView.Filter = null;

else
{
collectionView.Filter = o =>
{
Person item = (Person)o;

bool result = item.Fname.Contains(textBox2.Text, StringComparison.OrdinalIgnoreCase) ;
}
}

mahlake
جمعه 05 تیر 1394, 10:21 صبح
سلام
روش فیلتر


ICollectionView collectionView = CollectionViewSource.GetDefaultView(listperson);

if (String.IsNullOrEmpty(textBox2.Text))
collectionView.Filter = null;

else
{
collectionView.Filter = o =>
{
Person item = (Person)o;

bool result = item.Fname.Contains(textBox2.Text, StringComparison.OrdinalIgnoreCase) ;
}
}


علیرضا جان کدی که کمک کردی ارور میده...
132604

alireza264
جمعه 05 تیر 1394, 10:33 صبح
سلام تعریف لیست listperson رو درست استفاده کن

List<Person> listperson = new List<Person>();




یه سزی هم به این آدرس ها بزن شاید کمک که
https://documentation.devexpress.com/#WPF/CustomDocument11044

http://grantwinney.com/using-a-textbox-and-collectionviewsource-to-filter-a-listview-in-wpf/

http://stackoverflow.com/questions/20106085/how-to-filter-a-icollectionview-from-text-box-with-a-delay

mahlake
جمعه 05 تیر 1394, 14:44 عصر
سلام تعریف لیست listperson رو درست استفاده کن

List<Person> listperson = new List<Person>();




یه سزی هم به این آدرس ها بزن شاید کمک که
https://documentation.devexpress.com/#WPF/CustomDocument11044

http://grantwinney.com/using-a-textbox-and-collectionviewsource-to-filter-a-listview-in-wpf/

http://stackoverflow.com/questions/20106085/how-to-filter-a-icollectionview-from-text-box-with-a-delay

وای خدای من تا به حال انقدر احساس خنگ بودن بهم دست نداده بود... داداش من انگلیسیم خیلی ضعیفه... من خیلی گشتم... نمیشه به خدا....:گریه::گریه::گریه::گریه: :گریه:
تو رو خدا یه پروژه سمپل بزارید یا اگه میبینید ک نمیشه پروژه سنپل بگزارید لطفا بگید من یه سمپل بزارم شما کد رو اصلاحش کنید لطفاااا....:گریه::گریه::گریه:: ریه::گریه:

mahlake
جمعه 05 تیر 1394, 14:49 عصر
من یه کد گیر اوردم که کاری رو میکنه که من میخوام اما wpf هست اما من دارم ویندوز فرم کار میکنم... کمک کنید لطفا...
https://onedrive.live.com/?id=96F8D49AA44C79C1%21228&cid=96F8D49AA44C79C1&group=0&parId=96F8D49AA44C79C1%21133&o=OneUp

alireza264
جمعه 05 تیر 1394, 17:25 عصر
سلام
این تکه رو اینجوری اصلاح کن ببین مشکل حل میشه یا نه ضمن اینکه listperson هم باید توش رکورد باشه

ICollectionView collectionView = CollectionViewSource.GetDefaultView(listperson);

if (String.IsNullOrEmpty(textBox2.Text))
collectionView.Filter = null;

else
{
collectionView.Filter = o =>
{
Person item = (Person)o;

item.Fname.Contains(textBox2.Text, StringComparison.OrdinalIgnoreCase) ;
}
}



و اینم مثال بدون ICollectionView
http://www.codeproject.com/Tips/431281/Filter-DataGridView-with-the-text-entered-in-TextB