Поиск и фильтрация результатов из списка в Visual C # - PullRequest
0 голосов
/ 23 февраля 2019

Я только учусь кодировать на c # и пытаюсь найти способ поиска и фильтрации результатов из списка, содержащего данные.Прямо сейчас у меня есть список и кнопка поиска, мой список содержит историю веб-сайта, и моя кнопка поиска находит элемент в списке, но я не могу найти способ отфильтровать другие элементы, чтобы отображалось только то, что я искал в текстовом поле.в списке.Прямо сейчас моя кнопка поиска выглядит следующим образом.Есть идеи?

private void searchBtn_Click(object sender, EventArgs e)
{
    listBoxHist.SelectedItems.Clear();

    for (int i = 0; i < listBoxHist.Items.Count; i++)
    {
        if (listBoxHist.Items[i].ToString().Contains(textboxSearch.Text))
        {
            listBoxHist.SetSelected(i, true);

        }
    }

}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ListBox1.Items.Add("B");
            ListBox1.Items.Add("A");
            ListBox1.Items.Add("P");
            ListBox1.Items.Add("X");
            ListBox1.Items.Add("F");
            ListBox1.Items.Add("S");
            ListBox1.Items.Add("Z");
        }
    }


    protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        String txt=txtsearch.Text;
        if (ListBox1.Items.FindByText(txt)!= null)
        {
           // ListBox1.Items.FindByText(txt).Selected = true;

            Response.Write("<script> alert('Item found.');</script>");
        }
        else
        {
            Response.Write("<script> alert('Item Not found.');</script>");
        }
    }

}
0 голосов
/ 23 февраля 2019

Существует хорошо известный трюк для удаления элементов при переборе по коллекции.Вы должны выполнять итерацию в обратном направлении (от последнего элемента до первого), используя цикл for ...
Таким образом, когда вы удаляете элемент, вы не затрагиваете условие, используемое для выхода из цикла, и вам гарантировано, чтооценивается каждый элемент.

private void searchBtn_Click(object sender, EventArgs e)
{
    for (int i = listBoxHist.Items.Count - 1; i >= 0; i--)
    {
        if (listBoxHist.Items[i].ToString().Contains(textboxSearch.Text))
            listBoxHist.SetSelected(i, true);
        else
            listBoxHist.Items.RemoveAt(i);
    }
}

Если вы выполните этот код во время цикла перемотки вперед, у вас будет проблема с правильной оценкой каждого элемента.Предположим, вы удаляете элемент, когда индекс равен 3. Что происходит с элементом в позиции 4?Он скользит вниз на одну позицию, и теперь он занимает позицию 3, и это происходит с каждым другим предметом после.Теперь ваш цикл увеличит индекс до 4 и начнет оценивать элемент, который находился в позиции 5 перед вызовом RemoveAt.Вы пропустили оценку предмета.

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