所以,自从我开始在这里挣扎已经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
答案 0 :(得分:0)
正如我在评论中提到的,问题不在您过滤项目的代码中。它不可能是。问题就在这里:
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;