位置 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();
}
我正在尝试使用 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();
}