日期:2014-05-18  浏览次数:20471 次

当前上下文不存在ds
.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定义成公共变量了啊,不知错在哪,最近总是遇到这种问题,很着急,请大家指教!

------解决方案--------------------
把ds声明为public的
------解决方案--------------------
把ds声明为public的
------解决方案--------------------
public DataSet ds = new DataSet();
------解决方案--------------------
C# code

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

------解决方案--------------------
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]); 
}

------解决方案--------------------