【问题标题】:Pulling Data from tables to pass into an autocompleter c#从表中提取数据以传递到自动完成器 c#
【发布时间】:2018-04-14 00:20:57
【问题描述】:

我正在使用 c# 中的自动完成程序,我正在使用 SQL 存储过程来提取经过测试和工作的数据。

我遇到的问题是我正在使用填充自动完成器的 for 循环。

AutoCompleteStringCollection col = new AutoCompleteStringCollection();
        int i = 0;
        foreach (DataRow row in TYPESDS.Tables[0].Rows)
        {
            col.Add(row[i].ToString().ToUpper());
            i++;
        }

以上是我关于这个的地方,我没有收到任何错误,但是代码不起作用。

我有一个自动完成器在工作,但是它在代码中嵌入了 SQL,我宁愿让它使用存储过程工作。

【问题讨论】:

  • 定义“不起作用”。它做什么?当您在调试器中单步执行此代码时,它首先在哪里/如何偏离您的预期?该循环是否会迭代?值是否添加到col具体会发生什么?
  • 单步执行时,autoCompleter 方法运行一次,然后在涉及 col.Add 的第二次运行时出现错误:未处理 IndexOutOfRange 异常
  • 由于无法找到第 1 列,因此出现问题。但是,据我了解,我只是要求它通过行和列号不应该改变?

标签: c# sql autocomplete


【解决方案1】:

问题是使用 foreach() 来迭代行,然后对每一行也使用索引器 (i)。

在原始代码示例中,每次迭代中的“行”是一个数据行。对此的默认索引器是对 COLUMNS 的索引。所以在第一行,它将访问第 0 列,在第二行,它将访问第 1 列,依此类推。

第二个示例有效,因为您在表的 Rows 集合属性上使用索引器 (i) - 所以这是访问 ROW。然后在这一行上,您使用字段名称索引器来获取“类型”列。

如果第一个例子被修改成这样:

AutoCompleteStringCollection col = new AutoCompleteStringCollection();
foreach (DataRow row in TYPESDS.Tables[0].Rows)
{
    col.Add(row["Type"].ToString().ToUpper());
}

那么它基本上相当于第二个(工作)示例。

【讨论】:

    【解决方案2】:

    我放弃了使用 foreach 并通过以下方式使其工作。

      for (int i = 0; i < TYPESDS.Tables[0].Rows.Count - 1; i++ )
      {
          col.Add(TYPESDS.Tables[0].Rows[i]["Type"].ToString().ToUpper());
      }
    

    我认为主要问题在于 Rows[i] 中没有 ["Type"]。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 2019-04-27
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多