索引超出范围。必须为非负值并小于集合大小。
参数名: index    protected void dlstShiShi_ItemCommand(object source, DataListCommandEventArgs e)
    {
        int id = Convert.ToInt32(dlstShiShi.DataKeys[e.Item.ItemIndex].ToString());
        Response.Write("<script language=javascript>window.open('NewsDetail.aspx?id=" + id + "','','_blank')</script>");
    }

解决方案 »

  1.   

    e.Item.ItemIndex   传入的值不正确
    if(e.Item.ItemIndex>=0)
    {
        int id = Convert.ToInt32(dlstShiShi.DataKeys[e.Item.ItemIndex].ToString());
      Response.Write("<script language=javascript>window.open('NewsDetail.aspx?id=" + id + "','','_blank')</script>");
    }
      

  2.   

    dlstShiShi.DataKeys通常只设置一个值
    而 e.Item.ItemIndex 不一定小于1 。这个代码错得很离谱,应该是dlstShiShi.DataKeys["字段名称"].ToString();
      

  3.   

    dlstShiShi.DataKeys[e.Item.ItemIndex].ToString() 使用前先判断, 索引是否超出范围
    类型转换,最好加上try catch
      

  4.   

    dlstShiShi.DataKeys[e.Item.ItemIndex]
    断点看看dlstShiShi.DataKeys的count  或是看e.Item.ItemIndex值
      

  5.   

    e.Item.ItemIndex在前段动态添加行了?