2014-01-23 6 views
0

У меня возникли проблемы с созданием различных фильтров для моего DataGridView. В основном у меня есть 4 кнопки: «Сегодня», «На этой неделе», «Этот месяц», «Этот год» и «Показать все». Когда я нажимаю любую из кнопок, я хотел бы иметь возможность отображать только строки, относящиеся к нажатой кнопке. Данные для даты хранятся в следующем формате: «ГГГГ-ММ-ДДТ00: 00: 00», включая тире и двоеточие.BindingSource filtering - C# WPF

Использование моего BindingData, как я могу правильно фильтровать записи с заданным форматом? Если вам нужен какой-либо код для чего-нибудь, пожалуйста, дайте мне знать.

+0

Почему данные даты/времени хранятся в виде текста? То, что вы хотите сделать, было бы легко, если бы это были фактически двоичные даты/время, но, если вы неправильно храните данные, вы делаете с ним трудное. Способ хранения данных в вашем контроле? Кстати, ваш заголовок говорит WPF, но затем вы утверждаете, что используете DataGridView, который является элементом управления WinForms. Что с этим? – jmcilhinney

+0

Моя ошибка в заголовке, было уже поздно, когда я отправил это, и да, как хранится дата и время, я не могу контролировать. – Clarke

ответ

0

Вы можете использовать CollectionView и CollectionViewSource для фильтрации данных. Вы можете обратиться к MSDN. How to: Group, Sort, and Filter Data in the DataGrid Control.

Пожелание может вам помочь.

Чтобы группировать, сортировать и фильтровать данные в DataGrid, вы привязываете его к CollectionView, который поддерживает эти функции. Затем вы можете работать с данными в CollectionView, не затрагивая исходные исходные данные. Изменения в представлении коллекции отражаются в пользовательском интерфейсе DataGrid (UI). Класс CollectionView предоставляет функции группировки и сортировки для источника данных, который реализует интерфейс IEnumerable. Класс CollectionViewSource позволяет вам устанавливать свойства CollectionView из XAML.

+0

Я рассмотрю это, спасибо за сообщение. – Clarke

0

Мне удалось добиться того, что я искал, я не знаю, является ли это лучшим способом сделать это. (! Я уверен, что есть гораздо более эффективные способы, поэтому, если есть, пожалуйста, дайте мне знать, что я хотел узнать здесь)

Вот мой фрагмент кода, показывающий, что я хотел добиться:

private void todayToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     DataView dv = _dataSource.Tables[0].DefaultView; //have a temp dataview to filter data in 
     DateTime date = new DateTime(); 
     date = DateTime.Today; 

     string expression = date.Year.ToString() + "-" + 
      date.Month.ToString() + "-" + date.Day.ToString(); 



     dv.RowFilter = string.Format("thedate = #{0}#", expression); 
     _tableNameBS.DataSource = dv; 

     dataGridView1.DataSource = _tableNameBS; 
    } 

_tableNameBS является источником BindingSource, поэтому теперь для удаления фильтра в другой функции все, что мне нужно вызвать, это «_tableNameBS.RemoveFilter», и оно возвращается к оригиналу.