搜索文本框上的复选框,但不记得选中的项目c#c Sharp

时间:2019-02-05 16:06:08

标签: c# search textbox checklistbox

当我在checkedListBox1中检查列表中的项目并使用textBox1搜索某些项目时,我以前的检查已消失。当我使用textBox1搜索并检查列表中的某个项目并搜索之前检查过的另一个项目时,它也消失了。有什么办法吗? C#

void ladujZBazy(string mustContains)
    {
        checkedListBox1.Items.Clear();
        listSurowceTabela.Clear();
        indexes.Clear();

        bazaproduktowDBEntities dc = new bazaproduktowDBEntities();

        var c1 = from d in dc.SurowceTabela select d.NazwaSurowca;
        var c2 = from d in dc.SurowceTabela select "(" + d.PartiaSurowca + ")";
        var c3 = from d in dc.SurowceTabela select d.IloscSurowca;
        var c4 = from d in dc.SurowceTabela select d.JednostkaSurowca;

        listSurowceTabela.Add(c1.ToList());
        listSurowceTabela.Add(c2.ToList());
        listSurowceTabela.Add(c3.ToList());
        listSurowceTabela.Add(c4.ToList());

        for (int i = 0; i < listSurowceTabela[0].Count; i++)
        {
            string strToAdd = "";
            for (int j = 0; j < listSurowceTabela.Count; j++)
            {
                strToAdd += " " + listSurowceTabela[j][i] + " ";
            }
            if (mustContains == null)
            {
                checkedListBox1.Items.Add(strToAdd);
                indexes.Add(i);
            }
            else if (strToAdd.ToLower().Contains(mustContains.ToLower()))
            {
                checkedListBox1.Items.Add(strToAdd);
                indexes.Add(i);
            }

        }
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        ladujZBazy(textBox1.Text);
    }

2 个答案:

答案 0 :(得分:0)

在代码顶部注释掉Clear()方法。这应该表明您正在清除这些值。然后按照需要清除和清除的方式进行操作。

答案 1 :(得分:0)

好吧,您的问题基本上出在ladujZBazy()的以下几行:

checkedListBox1.Items.Clear();
indexes.Clear();

您要在其中清除checkedListBox1的所有内容及其存储索引的地方。

因此,每次调用函数时,您都要清除checkedListBox1中的所有内容,然后重新创建/追加内容。因此,它只是刷新checkedListBox1中的所有项目(,即删除列表中所有已检查的项目。)。

因此,我们有2种方法可以使其发挥作用。

  1. 我们可以在Boolean上添加一个ladujZBazy()参数,该参数将确定是否清除 checkedListBox1

然后您修改后的ladujZBazy()看起来像这样:

void ladujZBazy(string mustContains, bool dropIndexes)
{
    // the below code will only run the value is supplied as TRUE
    if(dropIndexes)
    {
        checkedListBox1.Items.Clear();
        listSurowceTabela.Clear();
        indexes.Clear();
    }        

    // your rest of the code goes here
}

然后在文本框的TextChanged事件中以以下方式调用它:

ladujZBazy(textBox1.Text,false);// pass TRUE to clear the checked items
  1. 或者我们可以将索引和选中的项目清除和CheckListBox刷新逻辑移至单独的函数,如下所示:

    private void refreshChkListBox()
    {
       checkedListBox1.Items.Clear();
       listSurowceTabela.Clear();
       indexes.Clear();
       //your code to append items to list goes here
    }
    

然后在需要时调用此函数以刷新CheckListBox