得到错误“位置0没有行”

时间:2013-06-27 12:32:11

标签: c# asp.net exception

请帮我解决这个问题......我收到的错误是“0号位没有行”,“索引超出范围异常是用户代码无法解决的”

以下是我的代码

protected void Page_Load(object sender, EventArgs e)
{
    MTMSService obj = new MTMSService();
    DBAccess db = new DBAccess();
    {
        MTMSDTO objc = new MTMSDTO();
        {
            objc.TaskID = Convert.ToInt32(Session["TaskID"]);
            DataSet rep = obj.GetReports(objc);
            DataView Rprts = new DataView();
            Rprts.Table = rep.Tables[0];

            LblTaskID.Text = rep.Tables[0].Rows[0]["TaskID"].ToString();
            LblTaskName.Text = rep.Tables[1].Rows[0]["TaskName"].ToString();
            LblDueDate.Text = rep.Tables[2].Rows[0]["DueDate"].ToString();
            LblDescription.Text = rep.Tables[3].Rows[0]["Description"].ToString();
            LblAssignBy.Text = rep.Tables[4].Rows[0]["AssignBy"].ToString();
            LblStatus.Text = rep.Tables[5].Rows[0]["Status"].ToString();
            LblPercentageComplete.Text = 
                    rep.Tables[6].Rows[0]["PercentageComplete"].ToString();

            LblTaskName.Visible = true;
            LblAssignBy.Visible = true;
            LblDescription.Visible = true;
            LblDueDate.Visible = true;
            LblStatus.Visible = true;
            LblPercentageComplete.Visible = true;
            LblAssignTo.Visible = false;
        }
    }
}

4 个答案:

答案 0 :(得分:10)

您没有检查您的表格是否包含任何内容。消息很清楚 - 位置0没有行。它可能被抛出这一行,或者跟着它一行:

LblTaskID.Text = rep.Tables[0].Rows[0]["TaskID"].ToString();

在尝试从中获取数据之前,应检查是否存在行。类似的东西(在使用之前验证语法 - 这根本没有测试过):

var table = rep.Tables[0];
if (table.Rows.Count > 0){
    // Fetch the data... 
}
else
{
    // Handle missing data in an appropriate way...
}

答案 1 :(得分:4)

之前的建议一切都很好,您应该遵循它。

然而,对我来说很明显,在0位没有行的原因是你正在查看错误的表格。我严重怀疑你在一个表中有id,在另一个表中有名,等等,但是你为每个数据索引到另一个表。

rep.Tables[1]
rep.Tables[2]
rep.Tables[3]
rep.Tables[4]
rep.Tables[5]
rep.Tables[6]

应该都是

rep.Tables[0]

你肯定只有一张桌子,但正在看表0到表6!

答案 2 :(得分:0)

在访问任何内容之前,请先检查项目。执行此操作后如果仍然发生这种情况,请检查列名是否准确?例如,"TaskID"真的"TaskId"并且索引失败了吗?最后这些项目是否可以为空?如果是这样,则在空字段上调用ToString()不是您想要的。

答案 3 :(得分:0)

检查您的数据表是否为空