//这个方法通过等级查询出数据,返回表格
  public DataTable getDS()
  {
      String strSql = "select * from land where level between 1 and 10";
      DataSet ds = new DataSet();
      SqlCommand scom = new SqlCommand(strSql, Dbhelper.Connection);
      SqlDataAdapter sda = new SqlDataAdapter(scom);
      sda.Fill(ds);
      return ds.Tables[0];
  } //在这个事件内 调用
   protected void Page_Load(object sender, EventArgs e)
        {
            ArrayList listone = new ArrayList();
            ShowUser su=new ShowUser();
            DataTable dt = su.getDS();
            foreach (DataRow dr in dt.Rows)
            {
                int i = 1;
                listone[i] = Convert.ToInt32(dr["level"]);
                i++;
            }
       
        }我想查询出来的数据保存在一个动态数组里面
但是由于基础不好
语句写错了! 请高人指点一下代码应该怎么改正
vs出错提示是 :
                 索引超出范围。必须为非负值并小于集合大小。
                   参数名: index 

解决方案 »

  1.   

     foreach (DataRow dr in dt.Rows) 
                { 
                    
                    listone.add( Convert.ToInt32(dr["level"])); 
                   
                }      
      

  2.   

    protected void Page_Load(object sender, EventArgs e)
            {
                ArrayList listone = new ArrayList();
                ShowUser su=new ShowUser();
                DataTable dt = su.getDS();
                int i=0;
                foreach (DataRow dr in dt.Rows)
                {
                    listone[i] = Convert.ToInt32(dr["level"]);
                    i++;
                }     
            } 
      

  3.   

      protected void Page_Load(object sender, EventArgs e) 
            { 
                ArrayList listone = new ArrayList(); 
                ShowUser su=new ShowUser(); 
                DataTable dt = su.getDS(); 
                foreach (DataRow dr in dt.Rows) 
                { 
                    listone.Add(Convert.ToInt32(dr["level"])); 
                }      
            } 
    ArrayList不能在new了以后立刻使用[]操作符操作,要先添加数据,不然没有分配数据的内存。
      

  4.   

    listone[i] 开始时是没有的. 
                ArrayList listone = new ArrayList(); 
                ShowUser su=new ShowUser(); 
                DataTable dt = su.getDS(); 
                foreach (DataRow dr in dt.Rows) 
                { 
                                   listone.add(Convert.ToInt32(dr["level"])); 
                 
                }      
      

  5.   

    楼上正解 是这样的 ArrayList是动态分配大小的,你直接用list[索引]的方式赋值肯定是有越界风险的