位置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可能有行,但位置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();
}