Как сделать повторное срабатывание события
пытаюсь сделать фитрацию данных в таблице, посредством нажатия на заголовок столбца. Данные в этом столбце разные, хотел сделать так - что при на заголовок , отображались сначала одни данные , потом другие и тд. Не могу додумать как это сделать! Проверка на нажалие просто обходит вторую часть цикла. Подскажите пожалуйста.
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (dataGridView1.Columns[6].HeaderText == "Статус" & e.Clicks == 1)
{
var statusClick = context.Inventories.Select(x => new
{
id = x.Inventid,
name = x.Inventname,
serial = x.Serialnum,
datepov = x.Datepov,
datenextpov = x.Datenextpov,
filial = x.Filial.Filialname,
status = x.Status.Statusname,
service = x.Service.Servicename,
yearofman = x.Yearofman
}).AsEnumerable().Where(x => x.status == "Поверено")
.ToList();
dataGridView1.DataSource = statusClick;
}
else if (dataGridView1.Columns[6].HeaderText == "Статус" & e.Clicks == 2)
{
var statusClick = context.Inventories.Select(x => new
{
id = x.Inventid,
name = x.Inventname,
serial = x.Serialnum,
datepov = x.Datepov,
datenextpov = x.Datenextpov,
filial = x.Filial.Filialname,
status = x.Status.Statusname,
service = x.Service.Servicename,
yearofman = x.Yearofman
}).AsEnumerable().Where(x => x.status == "Не поверяется")
.ToList();
dataGridView1.DataSource = statusClick;
}
Ответы (1 шт):
Не повторяйте свой код. Используйте методы.
private void FilterStatus(string status)
{
var filtered = context.Inventories.Select(x => new
{
id = x.Inventid,
name = x.Inventname,
serial = x.Serialnum,
datepov = x.Datepov,
datenextpov = x.Datenextpov,
filial = x.Filial.Filialname,
status = x.Status.Statusname,
service = x.Service.Servicename,
yearofman = x.Yearofman
}).AsEnumerable().Where(x => x.status == status)
.ToList();
dataGridView1.DataSource = filtered;
}
Тогда можно написать вот такой обработчик.
private string currentStatus = "Поверено";
private void SwitchStatus()
{
if (currentStatus == "Поверено")
currentStatus = "Не поверяется";
else
currentStatus = "Поверено";
}
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (dataGridView1.Columns[6].HeaderText == "Статус")
{
SwitchStatus();
FilterStatus(currentStatus);
}
}
Вот и вся магия.
Но в целом, у вас идет запрос к БД на каждый такой клик. А стоит ли? Быть может проще не обращаться к БД, а изначально загрузить из нее все данные, а фильтровать их через BindingSource? Подумайте над этим.
Еще обратите внимание на & в условии, изучите разницу между & и &&.