从表中提取数据以传递到自动完成程序c#

从表中提取数据以传递到自动完成程序c#,c#,sql,autocomplete,C#,Sql,Autocomplete,我正在用c#开发一个自动补全器,我正在使用一个SQL存储过程来提取经过测试和工作的数据 我遇到的问题是我的for循环,我正在使用填充自动完成器 AutoCompleteStringCollection col = new AutoCompleteStringCollection(); int i = 0; foreach (DataRow row in TYPESDS.Tables[0].Rows) { col.Add(ro

我正在用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,我更希望它使用存储过程来工作。

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

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

我认为主要的问题是没有带行[I]的[“Type”]。

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

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

第二个示例之所以有效,是因为您正在对表的Rows集合属性使用索引器(i)——这就是访问一行。在此行中,您将使用字段名索引器获取“Type”列

如果将第一个示例修改为:

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

然后它基本上等同于第二个(工作)示例。

定义“不工作”。它有什么作用?当您在调试器中单步执行此代码时,它首先在何处/如何偏离预期?那个循环会迭代吗?是否将值添加到
列中?具体发生了什么?单步执行时,autoCompleter方法运行一次,然后在第二次运行时,当涉及列Add时,我得到错误:IndexAutoFrange异常未处理该问题是由于无法找到列1而发生的。然而,根据我的理解,我只是要求它遍历行和列的编号是否应该更改?