首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IndexOutOfRangeException与DataTable.Select

IndexOutOfRangeException与DataTable.Select
EN

Stack Overflow用户
提问于 2014-10-04 22:55:46
回答 3查看 1.5K关注 0票数 1

我有这样的代码:

代码语言:javascript
复制
private void comboBox2_TextChanged(object sender, EventArgs e)
{
    var price = dt.Select("desc = '" + comboBox2.Text + "'", "price ASC");

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

dt是一个datatable,它以如下方式持有库存项目: id、desc、price

当我从combobox (从dt中填充)中选择一个项时,它自己的代码工作得很好,但是如果我开始键入combobox,就会得到以下错误: Index超出了数组的范围。

只有当组合框与其中一个包含的项一起完成时,我才能进行查找?

太多的爱。*o)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-04 23:04:53

即使用户尚未完成输入,也总是在用户更改文本时触发该事件。由于您正在与=进行比较,所以文本必须与desc完全匹配。因此,当您尝试访问数组的第一行时,DataTable.Select不返回导致异常的任何行。

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

1)

代码语言:javascript
复制
var price = dt.Select("desc LIKE '*" + comboBox2.Text + "*'", "price ASC");

2)

代码语言:javascript
复制
if(price.Any())
    textBox9.Text = price[0][2].ToString();

Sidenote,我发现更易读:

代码语言:javascript
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 2014-10-04 23:08:40

在您的情况下,var price不返回任何内容,因为由use编写的字符串不是数据表。这段代码应该会有帮助。

代码语言:javascript
复制
        if (price != null && price.Count() > 0)
        {
            textBox9.Text = price[0][2].ToString();
        }

另一种情况是使组合框类型下拉列表,用户应该只从datatable设置输入。

同样,正如the所说,这个Text_Changed事件将在用户写的每封信上执行。注意这一点!

要注意写列名,不要用索引来表示列名--这是不好的做法!

票数 1
EN

Stack Overflow用户

发布于 2014-10-04 23:08:44

您可以尝试将代码放入try catch块中,然后以静默方式处理抛出的异常,当正确的输入被给予有效的答案时,您可以使用如下代码:-

代码语言:javascript
复制
private void comboBox2_TextChanged(object sender, EventArgs e)
{
    try
    {
        var price = dt.Select("desc = '" + comboBox2.Text + "'", "price ASC");

        textBox9.Text = price[0][2].ToString();
    }
    catch(Exception xyz)
    {}
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26197946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档