.aspx.cs页面中的代码如下:     DataSet ds = new DataSet(); 
   
    protected void Page_Load(object sender, EventArgs e)
    {
        //创建链接数据库
        SqlConnection con = DBConnection.creatConnection();
        con.Open();
        //定义查询语句
        string cmd = "select FunctionName,Content from GardenFunction";
        SqlDataAdapter sda = new SqlDataAdapter(cmd, con);
        sda.Fill(ds, "GardenFunction");
         con.Close();
    }
.aspx页面中的代码如下:
<table id="table11"  border ="0" runat ="server">
    <tr>
        <td valign ="top" style="height: 18px">
            <%
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    Label[] lbl = new Label[10];
                    lbl[i] = new Label();
                    lbl[i].Text = ds.Tables[0].Rows[i]["FunctionName"].ToString() ;
                    this.Page.Controls.Add(lbl[i]);
                }     
            %>
            </p> 
        </td>
    </tr>
    </table>
也就是想使用对象数组动态输出,可是总是出现“当前上下文不存在ds”的错误,我已经把ds定义成公共变量了啊,不知错在哪,最近总是遇到这种问题,很着急,请大家指教!

解决方案 »

  1.   

     public DataSet ds = new DataSet();
      

  2.   


    //DataSet ds = new DataSet();  //默认是private
    public DataSet ds = new DataSet();  
      

  3.   

    LS的回答正确了,不过建议LZ不要这样写,<table id="table11"  border ="0" runat ="server"> 
         <tr> 
             <td valign ="top" style="height: 18px"> 
                 <% 
                    for (int i = 0; i  < ds.Tables[0].Rows.Count; i++) 
                    { 
                        Label[] lbl = new Label[10]; 
                        lbl[i] = new Label(); 
                        lbl[i].Text = ds.Tables[0].Rows[i]["FunctionName"].ToString() ; 
                        this.Page.Controls.Add(lbl[i]); 
                    }      
                %> 
                 </p>  
             </td> 
         </tr> 
         </table> 
    -----------------------------------------------------------------------------------------------
    这段我觉得改为
    <table id="table11"  border ="0"
    <tr> 
             <td valign ="top" style="height: 18px" runat ="server"> id="td1"> 
                 
             </td> 
         </tr> 
         </table> 后台用StringBuilder来构造下面这段,然后用td1.InnerHTML = "";这样方式比较好
                    for (int i = 0; i  < ds.Tables[0].Rows.Count; i++) 
                    { 
                        Label[] lbl = new Label[10]; 
                        lbl[i] = new Label(); 
                        lbl[i].Text = ds.Tables[0].Rows[i]["FunctionName"].ToString() ; 
                        this.Page.Controls.Add(lbl[i]); 
                    }      
      

  4.   

       由于我想在<td>..</td>之间动态输出一组数据,如果用td1.InnerHTML = "";则只能输出一个数据,之前的数据都会被最后一个覆盖的。
      

  5.   

    td1.InnerHTML = "";的时候做一个循环,把数据都读进去,怎么会覆盖呢
      

  6.   

    我是这样写的:
             for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(ds.Tables[0].Rows[i]["Content"].ToString());
                td1.InnerHtml = sb.ToString();
            }
    运行之后只能显示最后一条数据,之前的都不能显示,是哪错了?
      

  7.   

    td1.InnerHtml += sb.ToString();
      

  8.   


    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    放循环外面
      

  9.   

    在asp.net中有一个名词叫 Codebehind 应该屏弃 <% %> 这种asp 中的写法
    在.aspx页 访问 .cs 中的成员,需要该成员的访问级别在protected或以上级别