如何处理 System.IndexOutOfRangeException:位置 21 处没有行

本文关键字:位置 IndexOutOfRangeException 何处理 处理 System | 更新日期: 2023-09-27 17:56:17

我有一个字符串,它由XML中的数据组成 format.it 由不同的标签组成,如VENUE标签,它有50个数据和艺术家标签,由20个数据组成。我的问题是当我在数据集中绑定该数据并将该数据添加到数据行中时,我收到错误 位置 21 处没有行 这是我的代码

      for (int i = 0; i < ds.Tables[1].Rows.Count; i++)
        {
            DataRow dr = dt.NewRow();
            dr["Venue"] = ds.Tables[1].Rows[i][1].ToString();
            dr["Address"] = ds.Tables[1].Rows[i][2].ToString();
            dr["City"] = ds.Tables[1].Rows[i][4].ToString();
            dr["State"] = ds.Tables[1].Rows[i][5].ToString();
            dr["ZipCode"] = ds.Tables[1].Rows[i][6].ToString();
            dr["Performer"] = ds.Tables[2].Rows[i][0].ToString();
         }

1 代表场地,2 代表艺术家。我如何处理此错误,因为我想要数据表中的场地和艺术家数据。帮帮我这个...

编辑

我这样做就像

       if(ds.Tables[2].Rows.Count>0)
          { 
            dr["Performer"] = ds.Tables[2].Rows[i][0].ToString();
          }
         else
          {
            dr["Performer"]="";
           }

但这不起作用,我给了我同样的错误

编辑这个呢

          if (ds.Tables[2].Rows.Count > i)
            {
                dr["Performer"] = ds.Tables[2].Rows[i][0].ToString();
            }
            else
            {
                dr["Performer"] = "no performer";
            }

如何处理 System.IndexOutOfRangeException:位置 21 处没有行

目前您假设Tables[2]的行数与 Tables[1] 行数一样多,这是由于以下两段代码:

for (int i = 0; i < ds.Tables[1].Rows.Count; i++)
{
    ...
    dr["Performer"] = ds.Tables[2].Rows[i][0].ToString();
}

目前尚不清楚您实际上要对执行者信息执行什么操作,但听起来您可能希望执行联接查询,并仅对联接行进行处理。

for (int i = 0; i < ds.Tables[1].Rows.Count; i++)
        {
            DataRow dr = dt.NewRow();
              dr["Venue"] = ds.Tables[1].Rows[i][1].ToString();
            dr["Address"] = ds.Tables[1].Rows[i][2].ToString();
            dr["City"] = ds.Tables[1].Rows[i][4].ToString();
            dr["State"] = ds.Tables[1].Rows[i][5].ToString();
            dr["ZipCode"] = ds.Tables[1].Rows[i][6].ToString();
             if(i<21){
              dr["Performer"] = ds.Tables[2].Rows[i][0].ToString();
            }
         }

尝试这样的事情而不是 21 放标签的数量