سلام
یک Datagrid دارم که اطلاعات داخل آن از طریق متدی که از یک وب سرویس فراخونی می شود, تکمیل می گردد. می خواهم بر روی ستونی از datagrid عملیات جستحو را انجام دهم که فقط سطرهایی که شامل عبارت جستجوی وارد شده است را نمایش دهد.
لازم به ذکر است به کلاسهای دیتا دسترسی ندارم که از طریق classname.contains (search_txt) عملیات جستجو را انجام دهم.
ممنون
باید روی دیتاگرید فیلتر بزنید و ItemsSource رو آپدیت کنید
برای اینکه داده های اول از بین نرن بهتره ItemsSource رو داخل جنریک لیست ای ذخیره داشته باشی
در کد زیر yourConditions رو با شروطی که میخواهید فیلتر کنید تغییر دهید
لازمه ی اجرای کد زیر اینه که از binding برای ستون های datagrid استفاده کرده باشید.
List<Model> Items = new List<Model>(); List<Model> filterResult = new List<Model>(); Items = dataGrid.ItemsSource as List<Model>; filterResult = Items.Where(c => yourConditions).Select(c => c).ToList(); dataGrid.ItemsSource = filterResult;
یه سوال داشتم. اینجا Model که استفاده کردید منظورتون چیه؟
داده هایی که دارین میریزین توی دیتاگرید رو مپ کنید به فیلدهای یک کلاسی به نام مثلا Model که دیتاگرید ستونهاش به فیلدهای اون کلاس bind شده
مثلا دیتاگرید زیر رو در نظر بگیرید
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="مشخصه" Binding="{Binding Id}" Width="150"/> <DataGridTextColumn Header="نام" Binding="{Binding Name}" Width="150"/> </DataGrid.Columns> </DataGrid>
خب Binding ها رو در نظر بگیرید و کلاس زیر رو به این صورت داریم :
class Model { internal string Id { get; set; } internal string Name { get; set; } }
این مدل میتونه بخشی از فیلدهای یک table از دیتابیس باشه یا table کامل باشه یا ادغامی از چند Table باشه، در واقع این مدل کلاسی است که دیتاگرید مپ میشه بهش.
خب، حالا وقتی میخواین از روی دیتاگرید لیستی ایجاد کنید اون لیست رو از روی مدلی که دیتاگرید ساخته شده ایجاد میکنید و اون رو فیلتر میکنید و ItemsSource دیتاگرید رو آپدیت میکنید
برای کد های فیلتر که اول فرستادم یادم رفت بگم: باید using system.linq رو اضافه کنید
موفق باشید
من اطلاعات کلاس فوق رو ندارم. باید خودم ایجاد کنم. datagrid توسط یک متد که از یک وب سرویس فراخوانی می شود تکمیل می گردد.
GrUserList.ItemsSource = notificationHelper.GetAllUsers().DefaultView;
خب پس اگه هیچ اطلاعاتی از فیلدها ندارین بهتره کل مقادیر رو اول بریزین توی datatable
اینکه ستون چندم میشه که مشخص هست قطعا، به صورت ایندکسی روی ستون مورد نظر داخل datatable شرط بگذارید و داخل foreach تمام سطر های dt رو چک کنید، در صورت اشتباه بودن شرط برای هر سطر میتونید سطر رو کامل از datatable حذف کنید
در آخر هم datatable رو بریزید توی ItemsSource دیتاگرید
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)