C# ComboBox在显示新值时保留旧值

C# ComboBox在显示新值时保留旧值,c#,.net,winforms,C#,.net,Winforms,我在这里挣扎已经4个小时了 看,我有这个组合框,它被绑定到一个列表,-按预期加载;但这里我还有一个文本框,它应该包含列表的过滤条件的文本。很好,将所有过滤项打包到一个新列表中,组合框将显示它。。。但当我选择从中选择一个项目时,即comboBox.item,它会返回第一个列表中的项目。是,第一个列表,显示过滤后的列表中的值;这些值是我稍后打包到dataGridView中的类对象 以下是更改的文本: private void textBox4_TextChanged_1(object sen

我在这里挣扎已经4个小时了

看,我有这个组合框,它被绑定到一个
列表
,-按预期加载;但这里我还有一个
文本框
,它应该包含
列表
的过滤条件的文本。很好,将所有过滤项打包到一个新列表中,组合框将显示它。。。但当我选择从中选择一个项目时,即comboBox.item,它会返回第一个
列表中的项目。是,第一个列表,显示过滤后的
列表中的值;这些值是我稍后打包到
dataGridView
中的类对象

以下是更改的
文本

    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;
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;
}
public分部类NabavkaFrm:Form
{
#这里有些东西
列表艺术=新列表();
//其他代码
row.Cells[0]。Value=art[comboBox1.SelectedIndex]。plu;
row.Cells[1].Value=art[comboBox1.SelectedIndex].naziv;
}

那么,是的,有什么建议吗?对每个路过的人来说,这是一天中的好时光:正如我在评论中提到的,问题不在筛选项目的代码中。不可能。问题就在这里:

row.Cells[0].Value = art[comboBox1.SelectedIndex].plu;
row.Cells[1].Value = art[comboBox1.SelectedIndex].naziv;
由于
art
是类级别字段,如果组合框中的项目为0,它将始终在
art
中的索引0处显示项目。你不想要这个。您希望显示筛选列表中索引0处的项,但该列表不断更改。有时索引0处的项目是一件事,而另一件事是另一件事

改为这样做:

var selectedItem = (comboBox1.SelectedValue as item);
row.Cells[0].Value = selectedItem.plu;

你只想让“男孩”回答你的问题吗?如果没有,请删除它,欢迎来到2018年。好吧,对不起,我想再也不会了:害怕刷新()和重置绑定(),你确定吗?您如何知道该项来自上一个列表?好吧,请看,此列表从文件解析为对象的“艺术”列表。然后,我做的是,我放置了一个按钮,将所选的项抛出到其他控件正下方的dataGridView中;而不是放置它放置的选定筛选项目,例如第一个项目。让我试着解释一下:如果第一个和第二个项目分别是“1”和“2”,在过滤后,“6”和“7”在它们的位置上,但是每当我尝试选择“6”时,它会将“1”抛出到dataGridView中,因此“7”抛出“2”。另外,谢谢大家的回复。
var selectedItem = (comboBox1.SelectedValue as item);
row.Cells[0].Value = selectedItem.plu;