مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

b-zarinfard

عضویت از 1393/01/01

جستجو بر روی ستون wpf DataGrid

  • شنبه 14 بهمن 1396
  • 12:24
تشکر میکنم

سلام

یک Datagrid دارم که اطلاعات داخل آن از طریق متدی که از یک وب سرویس فراخونی می شود, تکمیل می گردد. می خواهم بر روی ستونی از datagrid عملیات جستحو را انجام دهم که فقط سطرهایی که شامل عبارت جستجوی وارد شده است را نمایش دهد.

لازم به ذکر است به کلاسهای دیتا دسترسی ندارم که از طریق classname.contains (search_txt) عملیات جستجو را انجام دهم.

ممنون

پاسخ های این پرسش

تعداد پاسخ ها : 5 پاسخ
کاربر سایت

salman_b

عضویت از 1396/02/18

  • شنبه 14 بهمن 1396
  • 12:58

باید روی دیتاگرید فیلتر بزنید و 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;
کاربر سایت

b-zarinfard

عضویت از 1393/01/01

  • شنبه 14 بهمن 1396
  • 13:30

یه سوال داشتم. اینجا Model که استفاده کردید منظورتون چیه؟

کاربر سایت

salman_b

عضویت از 1396/02/18

  • شنبه 14 بهمن 1396
  • 13:42

داده هایی که دارین میریزین توی دیتاگرید رو مپ کنید به فیلدهای یک کلاسی به نام مثلا 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‌ رو اضافه کنید

موفق باشید

کاربر سایت

b-zarinfard

عضویت از 1393/01/01

  • شنبه 14 بهمن 1396
  • 13:46

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

GrUserList.ItemsSource = notificationHelper.GetAllUsers().DefaultView;

کاربر سایت

salman_b

عضویت از 1396/02/18

  • شنبه 14 بهمن 1396
  • 15:23

خب پس اگه هیچ اطلاعاتی از فیلدها ندارین بهتره کل مقادیر رو اول بریزین توی datatable

اینکه ستون چندم میشه که مشخص هست قطعا، به صورت ایندکسی روی ستون مورد نظر داخل datatable شرط بگذارید و داخل foreach تمام سطر های dt رو چک کنید، در صورت اشتباه بودن شرط برای هر سطر میتونید سطر رو کامل از datatable حذف کنید

در آخر هم datatable رو بریزید توی ItemsSource دیتاگرید

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)