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