Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 1
Регистрация: 06.05.2014
Сообщений: 65

Оптимизация фильтрации в DataGridView

02.06.2015, 17:18. Показов 1858. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые гуру программирования помогите оптимизировать фильтрацию, у меня в гриде строчные данные. При фильтрации файла в котором около 11000 строк программа зависает секунд на 40, как можно её ускорить, подскажите пожалуйста.

фильтрую так:
C#
1
2
foreach (DataGridViewRow row in dataGridView1.Rows)
row.Visible = ((double)dataGridView1[comboBox1.SelectedIndex, row.Index].Value >= double.Parse(textBox1.Text) && (double)dataGridView1[comboBox1.SelectedIndex, row.Index].Value <= double.Parse(textBox2.Text));
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2015, 17:18
Ответы с готовыми решениями:

DataGridView Фильтрации по дате
Здравствуйте. хочу сделать фильтр по дате. в гугл есть пример на someDataView.RowFilter = &quot; SOME_DATE &gt;= #&quot; + MinDate +...

Сброс фильтрации в DataGridView
Как вернуть изначальную таблицу, после проведенной фильтрации? Например было 10 строк, поле фильтрации их оказалось 3, теперь как...

Снятие фильтрации в DataGridView
Здравствуйте, подскажите как снять фильтрацию по datagridview, т.е я данные нахожу по полю textbox, и мне осталось чтобы по нажатию на...

8
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
02.06.2015, 17:54
Цитата Сообщение от Evdos Посмотреть сообщение
как можно её ускорить
Ну как минимум нужно сделать так:
C#
1
2
3
4
5
6
7
8
var val1 = double.Parse(textBox1.Text);
var val2 = double.Parse(textBox2.Text);
var i = comboBox1.SelectedIndex;
foreach (var row in dataGridView1.Rows)
{
   var val = (double)row[i].Value;
   row.Visible = (val >= val1) && (val <= val2);
}
А вообще-то фильтровать нужно данные а не контролы.
1
2 / 2 / 1
Регистрация: 06.05.2014
Сообщений: 65
02.06.2015, 20:02  [ТС]
Storm23, что то явно не так, row[i] - индекс???
foreach (var row in dataGridView1.Rows) - ругается на var row

Добавлено через 29 минут
Storm23, И если второй textbox пуст выдаёт ошибку
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
02.06.2015, 21:23
Цитата Сообщение от Evdos Посмотреть сообщение
Storm23, что то явно не так, row[i] - индекс???
foreach (var row in dataGridView1.Rows) - ругается на var row
C#
1
2
3
4
5
6
7
8
9
            var val1 = double.Parse(textBox1.Text);
            var val2 = double.Parse(textBox2.Text);
            var i = comboBox1.SelectedIndex;
 
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                var val = (double)row.Cells[i].Value;
                row.Visible = (val >= val1) && (val <= val2);
            }
1
2 / 2 / 1
Регистрация: 06.05.2014
Сообщений: 65
02.06.2015, 23:17  [ТС]
Storm23, при нажатии на кнопку фильтрации Input string was not in a correct format.

ссылается на строку
C#
1
var val2 = double.Parse(textBox2.Text);
Добавлено через 34 секунды
Всё же оно не ускорило фильтрацию
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
02.06.2015, 23:58
Цитата Сообщение от Evdos Посмотреть сообщение
Всё же оно не ускорило фильтрацию
==>
Цитата Сообщение от Storm23 Посмотреть сообщение
А вообще-то фильтровать нужно данные а не контролы.
1
2 / 2 / 1
Регистрация: 06.05.2014
Сообщений: 65
03.06.2015, 00:11  [ТС]
Storm23, можно по подробнее, что вы имеете в виду?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
03.06.2015, 00:43
Лучший ответ Сообщение было отмечено Evdos как решение

Решение

Evdos,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Forms;
 
namespace WindowsFormsApplication294
{
    public partial class Form1 : Form
    {
        private List<MyObject> list = new List<MyObject>();
        private List<MyObject> filteredList = new List<MyObject>();
        private DataGridView dgv;
 
        public Form1()
        {
            //инициализируем данные
            var rnd = new Random();
 
            list = new List<MyObject>();
            for (int i = 0; i < 100000; i++)
                list.Add(new MyObject{Id = i, A = rnd.NextDouble()} );
            //создаем контролы
            filteredList = new List<MyObject>(list);
            //
            dgv = new DataGridView {Parent = this, Dock = DockStyle.Fill};
            dgv.DataSource = filteredList;
            //
            var bt = new Button { Parent = this, Dock = DockStyle.Top, Text = "Filter" };
            bt.Click += delegate{ FilterList(); };
        }
 
        //фильтрация
        private void FilterList()
        {
            var sw = Stopwatch.StartNew();
 
            dgv.DataSource = null;
 
            var from = 0.5d;
            var to = 0.6d;
 
            filteredList.Clear();
            foreach (var item in list)
                if (item.A >= from && item.A <= to)
                    filteredList.Add(item);
 
            dgv.DataSource = filteredList;
 
            MessageBox.Show(string.Format("Items: {0}\r\nTime of filtering: {1}", list.Count, sw.Elapsed));
        }
    }
 
    //объект данных
    public class MyObject
    {
        public int Id { get; set; }
        public double A { get; set; }
    }
}
1
2 / 2 / 1
Регистрация: 06.05.2014
Сообщений: 65
05.06.2015, 14:04  [ТС]
Storm23, Спасибо вам огромное за помощь!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2015, 14:04
Помогаю со студенческими работами здесь

Ошибка при фильтрации данных с DataGridView
Не выполняет следующий код string s = &quot;Имя = &quot;+ textBox1.Text; таблица1BindingSource.Filter = s; Выдает след. ошибку...

При фильтрации или сортировке dataGridView индексы строк меняются
Здравствуйте! Есть dataGridView в котором фильтруются данные по запросам. Но после того как данные в dataGridView уже отфильтрованы...

Оптимизация проверки ячеек DataGridView
Доброго времени суток У меня есть одна dgv - табличка в ней бывает ~600 строк, в которых менее 10 колонок. Производится очень много...

Оптимизация заполнения нескольких DataGridView в Tabcontrol
Подскажите пожалуйста, как быть Есть TAbcontrol и datagriedview. Datagriedview в разных tabcontrol очень много, около 10. Если они...

Оптимизация DataGridView
Доброго времени суток и всех с наступающим праздником! Пишу программу на winForm. Программа коннектится к БД access и нужно из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru