Поиск флажок в текстовом поле, но не помню, отмеченные элементы C# c резко

Когда я проверял элементы в списке в selectedListBox1 и осуществлял поиск некоторых элементов с использованием 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 ответа

Закомментируйте методы Clear() вверху вашего кода. Это должно продемонстрировать, что вы очищаете эти значения. Затем проложите себе путь через то, что на самом деле нужно очистить, а что нет.

Ну, ваша проблема в основном заключается в этих 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. Или мы можем переместить индекс и проверенный элемент Clearing и CheckListBox Refreshing Logic в отдельную функцию как:

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

И позже вызовите эту функцию, чтобы обновить CheckListBox если у вас есть необходимость в этом.

Другие вопросы по тегам