在Page_Load方法里这样写
if(!isPostback)
{
string sql1 = "select id,info from test";
  SqlConnection con = DB.createConnection();
  con.Open();
  SqlCommand cmd1 = new SqlCommand(sql1, con);
  SqlDataReader str1 = cmd1.ExecuteReader();
  list1.DataSource = str1;
  list1.DataTextField = "info";
  list1.DataValueField = "id";
  list1.DataBind();
  con.Close();}

解决方案 »

  1.   

    绑定数据的时候可能没有注意到回传。如果发生回传(postback)就可以将listbox的selectitem设为第一项
      

  2.   

      if (list1.Items[i].Selected)
                  {
                    Response.Write(list1.Items[i].Text);                                }
      

  3.   


    我是要把选中项目的值(Value)发送到另一个页面
      

  4.   

    postback 属性设为 true。
      

  5.   

    经鉴定 这段代码没问题 可以判断是否选中:protected void Button1_Click(object sender, EventArgs e)
      {
      for (int i = 0; i < list1.Items.Count; i++)
      {
      if (list1.Items[i].Selected)
      Response.Write(list1.Items[i].Value); //调试的时候这步直接跳过
      }
      }
    我认为 是你在单击按钮时 又调用 了Page_Load事件了 不行你可以挂个断点 绝对先调用 Page_Load事件但一调用Page_Load事件 你的list1里面的数据 重新绑定 了 然后在执行Button1_Click事件  当然没有选中 
    所以不会进到  Response.Write(list1.Items[i].Value); 这句代码中解决方法 把:
    string sql1 = "select id,info from test";
      SqlConnection con = DB.createConnection();
      con.Open();
      SqlCommand cmd1 = new SqlCommand(sql1, con);
      SqlDataReader str1 = cmd1.ExecuteReader();
      list1.DataSource = str1;
      list1.DataTextField = "info";
      list1.DataValueField = "id";
      list1.DataBind();
      con.Close();用
    if(!isPostback)
    {
    }
    包含起来 这样 后台回调访问时 就不会再次绑定数据我要分 啊
      

  6.   

    if(!isPostback)
    {
    里绑定
    }如果发送 要把选中用str 链接上在传值
      Response.Redirect( "target.aspx?ID=hello") 
    接收页面: string str = Request.QueryString["ID"];