Поиск в ListView c # - PullRequest
       3

Поиск в ListView c #

0 голосов
/ 23 сентября 2011

Я написал метод для поиска в ListView заданной строки и пометил найденные строки с помощью Color.Однако он работает нормально, с большим количеством информации на экране и прокручиваемым ListView, иногда бывает трудно найти то, что ищет пользователь.

Обычно я создаю special поиски, изменяя метод и предложение SQL-запроса WHERE, но это всегда сложно и требует больше работы / кода для каждого ListView / Data.

Мне бы хотелось иметь обобщенный поиск, который бы работал для всех видов поиска в ListView, точно так же, как у меня сейчас, но с возможностью скрывать (строки) то, что не нужно, и показывать только необходимые строки.Конечно, если кто-то передумает, он должен вернуть старые строки обратно.

Думаю, самая большая проблема для меня - как сохранить все столбцы и данные, не усложняя, зная, что это может быть от 3 до 20+ столбцов и несколько строк.

public static void wyszukajNazweListView(ListView varListView, string varWyszukaj) {
        if (varWyszukaj != "") {
            foreach (ListViewItem comp in varListView.Items) {
                comp.UseItemStyleForSubItems = false;
                foreach (ListViewItem.ListViewSubItem drv in comp.SubItems) {
                    string textToAdd2 = drv.Text;
                    if (textToAdd2.Length >= 1) {
                        if (textToAdd2.ToLower().Contains(varWyszukaj.ToLower())) {
                            drv.BackColor = Color.DarkOrange;
                        } else {
                            drv.BackColor = Color.White;
                        }
                    }
                }
                bool varColor = false;
                foreach (ListViewItem.ListViewSubItem drv in comp.SubItems) {
                    if (drv.BackColor == Color.DarkOrange) {
                        varColor = true;
                        break;
                    }
                }
                if (varListView.SmallImageList != null) {
                    if (varColor) {
                        comp.ImageIndex = 2;
                    } else {
                        comp.ImageIndex = -1;
                    }
                }
            }
        } else {
            foreach (ListViewItem comp in varListView.Items) {
                comp.UseItemStyleForSubItems = false;
                comp.BackColor = Color.White;
                foreach (ListViewItem.ListViewSubItem drv in comp.SubItems) {
                    drv.BackColor = Color.White;
                    comp.ImageIndex = -1;
                }
            }
        }
    }

1 Ответ

1 голос
/ 23 сентября 2011

Я бы, вероятно, сохранил его как DataTable объект. Тип DataTable позволяет установить его строки как скрытые (например, Visible = false), и вы можете привязать свой ListView непосредственно к нему.

РЕДАКТИРОВАТЬ: заметил тег WinForms. Еще проще: не нужно издеваться над ViewState / Session.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...