请帮我解决这个问题。。。我得到的错误是"在位置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;
}
}
}
您没有检查表是否有任何内容。消息很清楚:位置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...
}
前面的建议很好,你应该遵循它。
然而,在我看来很明显,在位置0没有行的原因是您看错了表。我非常怀疑您在一个表中是否有id,在另一个表是否有name,等等,但您正在为每一条数据索引到不同的表。
rep.Tables[1]
rep.Tables[2]
rep.Tables[3]
rep.Tables[4]
rep.Tables[5]
rep.Tables[6]
应该都是吗
rep.Tables[0]
您肯定只有一个表,但正在查看表0到表6!
在访问任何内容之前,请先检查项目。完成后,如果仍然发生这种情况,请检查列名是否准确?例如,"TaskID"
真的是"TaskId"
吗?而索引正在失败?最后,这些项可以为null吗?如果是这样的话,对null字段调用ToString()不是您想要的。
检查数据表是否为空