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

时间:2014-04-03 09:41:07

标签: c# xml datatable dataset datarow

我有一个由XML格式的数据组成的字符串。它由不同的标签组成,如VENUE标签中有50个数据& ARTIST标签,包含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();
         }
VENUE&amp ;;

1 2对于艺术家。我如何处理这个错误,因为我想要VENUE&amp;数据表中的ARTIST数据。帮助我...

修改

我这样做了

       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";
            }

2 个答案:

答案 0 :(得分:0)

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

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

目前尚不清楚您实际上要对表演者信息做些什么,但听起来您可能想要执行连接查询,并且只对连接的行进行操作。

答案 1 :(得分:0)

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把标签的数量