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

本文关键字:模式 映射 调试 位置 | 更新日期: 2023-09-27 17:53:27

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

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没有行,我在调试模式下查看表,列和列表,它被正确地映射为[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中没有行,但在调试模式下它被正确映射

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

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

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

请使用foreach循环中的row变量。

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

请注意,这些标签的值将被覆盖到您的DataTable中的每个DataRow。因此,您将在这些标签中看到的是DataTable中最后行的值。因此,您可能需要重新编写您的逻辑。

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

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