【问题标题】:There is no row in position 1 but in debug mode it is correctly mapped位置 1 没有行,但在调试模式下它已正确映射
【发布时间】:2015-08-18 06:24:30
【问题描述】:

我正在尝试使用 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 没有行,我在调试模式下查看了表、列和列表,其映射正确,如 [1] = [t_idsc]。为什么我会收到此错误?请帮帮我。

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

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

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

【问题讨论】:

    标签: c# asp.net datatable datarow


    【解决方案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 设置为 second 行的“t_idsc”。

    改为使用 foreach 循环中的行变量。

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

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

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

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

    【讨论】:

    • 在我的问题中,我附加了另一种方法,但我仍然遇到同样的错误,所以请你向我澄清一下那里出了什么问题,请伙计。
    • 有点,但不完全是。请参阅我上面的编辑。当您使用foreach 循环时,该循环会为您提供DataRow。如果没有循环,您需要自己获取DataRow(即dt.Rows[0])。
    • 您好像删除了一条评论。我的第一条评论是针对这个的。对于您的第二条评论 - 使用 dt.Rows[0][0] 部分告诉它您想要行集合的索引 0,也称为第一行。 [1] 表示您想要行集合的索引 1 或第二行。由于您没有第二行,因此会引发错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多