我想实现这样的功能:当数据库中有记录时,当单击“下一步”或“上一步”时,在各控件中显示相应的内容;若数据库中没有记录,当单击那两个按纽时,弹出“这一步目标尚未分解,请分解!”。可是,程序却老是不听话,请大家帮我驯服它。
下面是相关的代码:
void clearText()
{
txt_qishi.Text="";
txt_zhongzhi.Text="";
txt_gsbida.Text="";
txt_gstiaozhan.Text="";
txt_bidascore.Text="";
txt_chascore.Text="";
}
  void show()
    {
  //用于查询数据
  SqlConnection conn=new SqlConnection(); //新建连接对象
  conn.ConnectionString=   //从配置文件中获取信息
  ConfigurationSettings.AppSettings["ConnectionString"];
  SqlCommand cmd=new SqlCommand();
  cmd.Connection=conn; //必不可少
  string SQLstr="Select * from gsmb where mubiaoID=@ID";
  cmd.CommandText=SQLstr;
  cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.VarChar,50)); //关键之处
  cmd.Parameters["@ID"].Value=Session["gsID"].ToString()+"-"+Session["counter"].ToString();
  conn.Open(); //打开连接,读取数据.
  SqlDataReader reader;
  reader=cmd.ExecuteReader();
  
  //设置控件属性以显示信息 
  while(reader.Read()) //使前进到并读取下一条记录.
  {
  Response.Write("<script language='javascript'>alert('Nice to meet you!');</script>"); //仅为测试而用用   if(reader.GetString(0)=="")
  {   
  //clearText();
  Response.Write("<script language='javascript'>alert('这一步目标尚未分解,请分解!');</script>");
  }
  else
  {   
  Response.Write("<script language='javascript'>alert('Nice to meet you!');</script>");   if(reader.GetDateTime(1).ToString()!="") //注意数据类型
  this.txt_qishi.Text=reader.GetDateTime(1).ToString();
  if(reader.GetDateTime(2).ToString()!="") //注意数据类型
  this.txt_zhongzhi.Text=reader.GetDateTime(2).ToString();
  if(reader.GetString(3)!="")
  this.txt_gsbida.Text=reader.GetString(3);
  if(reader.GetString(4)!="")
  this.txt_gstiaozhan.Text=reader.GetString(4);
  if(reader.GetString(5)!="")
  this.txt_bidascore.Text=reader.GetString(5);
  if(reader.GetString(6)!="")
  this.txt_chascore.Text=reader.GetString(6);
  }

  }
  
  reader.Close();
  conn.Close();
    }

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
//此处放置初始化和查询代码.
if(!Page.IsPostBack)
{
Session["counter"]=1;

}
show();//显示该步骤各项信息


}
private void btn_back_Click(object sender, System.EventArgs e)
{  //用于实现“上一步”,代码次序不可换
if ((int)Session["counter"]==1) //注意格式
{
Response.Redirect("gsmb.aspx"); 
}
else 
{  

Session["counter"]=(int)Session["counter"]-1; //注意格式
lbl_dijibu.Text="第"+Session["counter"].ToString()+"步";
show();//显示该步骤各项信息


}

} private void btn_next_Click(object sender, System.EventArgs e)
{  //用于实现“下一步”,代码次序不可换
      
int a=(int)Session["counter"];
int b=Convert.ToInt32(Session["buzhou"]);
if (a<b-1) //注意格式
{   
Session["counter"]=(int)Session["counter"]+1; 
lbl_dijibu.Text="第"+Session["counter"].ToString()+"步";
}
else if (a==b-1) //注意格式
{
Session["counter"]=b;
lbl_dijibu.Text="第"+Session["counter"].ToString()+"步(最后一步)";

}
show();//显示该步骤各项信息
         }
其中,“下一步”和“上一步”代码能正确地实现lbl_dijibu控件显示第几步的功能。但是,下面的代码出了问题:
 if(reader.GetString(0)=="")
  {   
  //clearText();
  Response.Write("<script language='javascript'>alert('这一步目标尚未分解,请分解!');</script>");
  }
我有一个4步的目标,前2步已分解,后2步未分解。我把if(reader.GetString(0)=="")换成if(reader.GetString(0)!=""),在前2步(此时满足条件)可以弹出“这一步目标尚未分解,请分解!”,但是,若把 != 换成==,则在后两步无法弹出“这一步目标尚未分解,请分解!”!同样的代码,有的能弹出,有的却弹不出。实在太气人人了!
还还有一个问题,我添加下面这行代码仅为了测试:
Response.Write("<script language='javascript'>alert('Nice to meet you!');</script>"); //仅为测试而用用
但却发现了问题:从另一页面通过链接进入本页面(此时为第一步)时,弹出1次'Nice to meet you!点“下一步”,从第1步到第2步,弹出了2次;从第2步到第三步,弹出了1次;从第3步到第四步,未弹出。点“上一步”,第四到第三,0次;第三到第2,1次;第2到第一,2次;第1到前一页面,1次。我百思不得其解。
 大家能不能帮个忙,看到底怎么回事?谢谢!

解决方案 »

  1.   

    补充一点,上面我刚才删了“//”, Response.Write("<script language='javascript'>alert('Nice to meet you!');</script>"); //仅为测试而用用
    其实是
    //Response.Write("<script language='javascript'>alert('Nice to meet you!');</script>"); //仅为测试而用。
    下面else 中的这行代码有效。
    还有一点,点“上一步”,由第1步到前一页面,未弹出,而非弹出1次。
      

  2.   

    你用ds然后判断ds的length是不是等于0部就好了
      

  3.   

    这个是VB里的。楼上的去看看VB语法
      

  4.   

    不过,大哥,我用的是C#呀,俺对VB不懂,也不想懂。各位,帮帮忙吧!别看上面代码有点长,其实都很简单。我不明白的是里面的代码不听话,按常理 ,该显示的它不显示,却又出了莫名其妙的问题。
      

  5.   

    上一步,下一步用属性来做,本页面传递值用ViewState传递
      

  6.   

    “上一步”和“下一步”的确是用属性拦设置的,页面传值用的是Session.