gpt4 book ai didi

c# - 带有 DataTable.Select 的 IndexOutOfRangeException

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:50 24 4
gpt4 key购买 nike

我有这个代码:

private void comboBox2_TextChanged(object sender, EventArgs e)
{
var price = dt.Select("desc = '" + comboBox2.Text + "'", "price ASC");

textBox9.Text = price[0][2].ToString();
}

dt 是一个数据表,按行存储库存商品:id、desc、price

当我从组合框中选择一个项目(从 dt 填充)时,它自己的代码工作正常,但如果我开始在组合框中键入,我会收到此错误:索引超出数组范围。

如何仅在组合框包含其中一项时才进行查找?

满满的爱。 :o)

最佳答案

当用户(或程序)更改文本时,该事件总是被触发,即使他还没有完成输入。由于您要与 = 进行比较,因此文本必须完全匹配 desc。因此,当您尝试访问数组的第一行时,DataTable.Select 不返回任何导致异常的行。

更改过滤器以匹配子字符串。您可以通过检查数组是否包含行来防止错误:

1)

var price = dt.Select("desc LIKE '*" + comboBox2.Text + "*'", "price ASC");

2)

if(price.Any())
textBox9.Text = price[0][2].ToString();

旁注,我发现 LINQ-To-DataTable 更具可读性:

var foundRows = from row in dt.AsEnumerable()
let desc = row.Field<string>("desc")
where desc.Contains(comboBox2.Text)
select row;
DataRow firstMatch = foundRows.FirstOrDefault();
if(firstMatch != null)
{
textBox9.Text = firstMatch.Field<string>(2);
}

关于c# - 带有 DataTable.Select 的 IndexOutOfRangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26197946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com