位置 1 没有行,但在调试模式下它被正确映射

There is no row in position 1 but in debug mode it is correctly mapped

我正在尝试使用 TextBox 中的参数填充 DataTable。然后我想从 DataTable 中获取值并填充 WebForm 上的其余文本框。到目前为止,我正在测试它,所以我只希望填充两个文本框,因为我仍然需要验证其他文本框。我使用的代码是这样的:

try
{
    ItemsSetTableAdapters.AbileneTableAdapter ds = new ItemsSetTableAdapters.AbileneTableAdapter();
    ItemsSet.AbileneDataTable dt = new ItemsSet.AbileneDataTable();
    ds.Fill(dt, TxtItem.Text);
    con = true;

    if (con == true)
    {
        foreach(DataRow row in dt.Rows)
        {
            TxtItem.Text = dt.Rows[0]["t_item"].ToString();
            lbldesc.Text = dt.Rows[1]["t_idsc"].ToString();
        }
    }
}
catch (IfxException ifx)
{
    Console.WriteLine("Error:" + ifx.Message);
    Console.WriteLine("Source:" + ifx.Source);
    Console.WriteLine(ifx.StackTrace);
}

我收到的错误是位置 1 处没有行,我在调试模式下查看了 table、列和列表,它的映射正确如 [1] = [t_idsc].为什么会出现此错误?请帮帮我。

解决了我的问题,但只是想快速澄清一些事情:

这是我之前执行相同功能的代码,这有什么问题吗??

  if (dt.Rows.Count > 0)
      {
         TxtItem.Text = dt.Rows[0]["t_item"].ToString();
         lbldesc.Text = dt.Rows[1]["t_idsc"].ToString();
       }

位置 1 可能有一行,但位置 2 可能没有行。请记住,行集合是从零开始的。所以当你这样做时:

TxtItem.Text = dt.Rows[0]["t_item"].ToString();
lbldesc.Text = dt.Rows[1]["t_idsc"].ToString();

您正在将第一行的 TxtItem.Text 设置为 "t_item"。但是您将 lbldesc.Text 设置为 second 行的 "t_idsc"。

而是使用 foreach 循环中的行变量。

foreach(DataRow row in dt.Rows)
{
    TxtItem.Text = row["t_item"].ToString();
    lbldesc.Text = row["t_idsc"].ToString();
}

请注意,对于数据表中的每个数据行,这些标签的值都会被覆盖。因此,您将在这些标签中看到的是 DataTable 中 last 行的值。因此,您可能需要修改逻辑。

如果您只想获取第一行的值,您可以简单地将第一行的行号 0 硬编码为行集合的索引。

if(dt.Rows.Count > 0)
{
    TxtItem.Text = dt.Rows[0]["t_item"].ToString();
    lbldesc.Text = dt.Rows[0]["t_idsc"].ToString();
}