ComboBox сохраняет старые значения при отображении новых - PullRequest
0 голосов
/ 20 мая 2018

Итак, прошло 4 часа с тех пор, как я начал бороться здесь.

Видите, у меня есть этот comboBox, и он привязан к List<>, - загружается так, как должен;но здесь у меня также есть textBox, который должен содержать текст для критериев фильтрации List<>.Идет хорошо, упаковывает все отфильтрованные элементы в новый список, comboBox отображает его ... Но когда я выбираю элемент из него, то есть comboBox.Item, он возвращает элементы из первого list.Да, первый список, отображающий значения отфильтрованных list;эти значения являются объектами класса, которые я упаковываю в dataGridView позже.

Вот TextChanged:

    private void textBox4_TextChanged_1(object sender, EventArgs e)
    {
        IEnumerable<artikal> filtered =
            from artikal in art
            where artikal.naziv.ToUpper().Contains(textBox4.Text.ToUpper()) || artikal.plu.Contains(textBox4.Text) || artikal.barkod.Contains(textBox4.Text)
            select artikal;
        comboBox1.DataSource = null;
        comboBox1.Items.Clear();
        List<artikal> filter = filtered.ToList<artikal>();
        comboBox1.DataSource = filter;

и вот класс, я имею в виду, если это так важно, но я не уверен, что это:

public class artikal
    {
        public string plu { get; set; }
        public string naziv { get; set; }
        public string kolicina { get; set; }
        public string nabavnaCena { get; set; }
        public string prodajnaCnea { get; set; }
        public string barkod { get; set; }
        public override string ToString()
        {
            return plu + " " + naziv;
        }
    }

Этот список art является глобальным списком, определенным над всеми остальными в мире .Вот как я заполняю gridview:

public partial class NabavkaFrm : Form
{
    #region some stuff lying here

    List<item> art = new List<item>();
    // other code
    row.Cells[0].Value = art[comboBox1.SelectedIndex].plu;
    row.Cells[1].Value = art[comboBox1.SelectedIndex].naziv;
}

Итак, есть предложения?И доброго времени суток всем, кто проходит мимо: D

1 Ответ

0 голосов
/ 20 мая 2018

Как я уже упоминал в комментарии, проблема не в коде, где вы фильтруете элементы.Не может быть.Проблема прямо здесь:

row.Cells[0].Value = art[comboBox1.SelectedIndex].plu;
row.Cells[1].Value = art[comboBox1.SelectedIndex].naziv;

и поскольку art является полем уровня класса, если элемент из выпадающего списка равен 0, он всегда будет показывать элемент с индексом 0 в art.Вы не хотите этого.Вы хотите показать элемент с индексом 0 из вашего отфильтрованного списка, но этот список постоянно меняется.Иногда элемент с индексом 0 - это одно, а другое - в другой раз.

Вместо этого делайте так:

var selectedItem = (comboBox1.SelectedValue as item);
row.Cells[0].Value = selectedItem.plu;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...