在ListView中搜索c#

时间:2011-09-23 08:58:25

标签: c# winforms listview

我编写了一个方法来搜索ListView中的给定字符串,并标记Color找到的字符串。它工作正常,但屏幕和滚动ListView上的大量信息,有时很难找到用户正在寻找。

通常我会通过修改方法和SQL查询special子句来创建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 个答案:

答案 0 :(得分:1)

我可能会将其存储为DataTable对象。 DataTable类型允许将其行设置为隐藏(例如Visible = false),您可以将ListView直接绑定到它。

编辑:注意到WinForms标记。更简单:无需使用ViewState / Session进行模拟。