Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2019, 14:35   #1
андрей1107
Пользователь
 
Регистрация: 30.09.2015
Сообщений: 15
По умолчанию Поиск в DataGrid по тексту

Здравствуйте. Подскажите пожалуйста, как можно реализовать поиск в DataGrid через TextBox? Все мои попытки к сожалению безуспешны. Пример на фото
Код:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MySql.Data.MySqlClient;
 
namespace Diplom
{
    /// <summary>
    /// Логика взаимодействия для student.xaml
    /// </summary>
    public partial class student : Page
    {
        private connect conn;
        MySqlDataReader dataReader;
        private DataFiles dataFiles;
        private Student_list objEmp;
 
        public student()
        {
            InitializeComponent();
            FillCombobox();
            
        }
        MySqlConnection con = new MySqlConnection();
        private void FillCombobox()
        {
            GroupCombobox.Items.Clear();
 
            conn = new connect();
 
            conn.OpenConection();
            dataReader = conn.DataReader("Select name FROM `group`");
            while (dataReader.Read())
            {
                GroupCombobox.Items.Add(dataReader[0].ToString());
            }
            conn.CloseConnection();
        }
       
        private void GroupCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            dataFiles = new DataFiles();
            dataGrid.ItemsSource = dataFiles.GetAllStudent(GroupCombobox.SelectedValue.ToString());
 
            List<string> source = new List<string>();
 
            conn = new connect();
 
            conn.OpenConection();
            dataReader = conn.DataReader("Select name FROM `group`");
            while (dataReader.Read())
            {
                source.Add(dataReader[0].ToString());
            }
            conn.CloseConnection();
 
            groupList.ItemsSource = source;
 
        }
 
        private void Delete(object sender, RoutedEventArgs e)
        {
            try
            {
                var Res = MessageBox.Show("Уверены что хотите удалить запись?", "Проверка", MessageBoxButton.YesNo);
                if (Res == MessageBoxResult.Yes)
                {
                    dataFiles.DeleteStudent(objEmp);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void Edit(object sender, RoutedEventArgs e)
        {
            try
            {
 
                var Res = MessageBox.Show("Отредактировать данные?", "Подтверждение", MessageBoxButton.YesNo);
                if (Res == MessageBoxResult.Yes)
                {
 
                    dataFiles.UpdateStudent(objEmp);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            try
            {
                FrameworkElement element_EmpId = dataGrid.Columns[0].GetCellContent(e.Row);
                if (element_EmpId.GetType() == typeof(TextBox))
                {
                    var eno = ((TextBox)element_EmpId).Text;
                    objEmp.id = Convert.ToInt16(eno);
                }
 
                FrameworkElement element_EmpNo = dataGrid.Columns[1].GetCellContent(e.Row);
                if (element_EmpNo.GetType() == typeof(TextBox))
                {
                    var eno = ((TextBox)element_EmpNo).Text;
                    objEmp.FIO = Convert.ToString(eno);
                }
                FrameworkElement element_EmpName = dataGrid.Columns[2].GetCellContent(e.Row);
                if (element_EmpName.GetType() == typeof(ComboBox))
                {
                    var ename = ((ComboBox)element_EmpName).SelectedValue.ToString();
                    objEmp.group = ename;
                }
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            objEmp = dataGrid.SelectedItem as Student_list;
        }
         
    
//текстовое поле для поиска в dataGrid
        private void tb_TextChanged(object sender, TextChangedEventArgs e)
        {
 
            for (int i = 0; i < dataGrid.Items.Count; i++)
            {
                string cellContent = objEmp.FIO.ToString();
              
                try
                {
                    if (cellContent != null && cellContent.Substring(0, tb.Text.Length).Equals(tb.Text))
                    {
                        object item = dataGrid.Items[i];
                        dataGrid.SelectedItem = item;
                        dataGrid.ScrollIntoView(item);
                        break;
                    }
                }
                catch { }
            }
        }
 
        
    }
 
}
Изображения
Тип файла: jpg BaavA.jpg (70.1 Кб, 63 просмотров)
андрей1107 вне форума Ответить с цитированием
Старый 13.10.2019, 22:48   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Называется это не поиск, а фильтрация. Реализуется в любом контроле через CollectionViewSource.
в качестве источника данных CollectionViewSource указываем коллекцию всех студентов. Вешаем обработчик Filter, в который на вход будет приходить студент и ему нужно выставить флаг Accepted в true - если он подходит или false - не подходит.
Соответственно в этом обработчике можно сравнивать что угодно с чем угодно.
pu4koff вне форума Ответить с цитированием
Старый 13.10.2019, 23:57   #3
андрей1107
Пользователь
 
Регистрация: 30.09.2015
Сообщений: 15
По умолчанию

Ничего не понял....(((
андрей1107 вне форума Ответить с цитированием
Старый 15.10.2019, 09:00   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Гуглить по CollectionViewSource в сети куча документации и примеров
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Индексированный поиск по тексту Аночка Visual C++ 0 19.06.2012 09:03
Поиск по тексту в Memo Asblue Помощь студентам 3 28.11.2010 13:21
Поиск по тексту в Memo Asblue Помощь студентам 0 28.11.2010 12:59
поиск по тексту Cmon Помощь студентам 2 16.07.2010 03:08
Поиск по тексту khofa Общие вопросы Delphi 6 08.02.2010 11:18