public  void selsetgrade()//查询年级
        {
            try
            {
                AddStudentForm add = new AddStudentForm();
                conn();//打开连接
                String sql = "select gradename from grade";
                cmd = new SqlCommand(sql, con);
                read = cmd.ExecuteReader();
                string gradename = "";
                while (read.Read())
                {
                    gradename = (string)read["gradename"];
                    add.libglass.Items.Add(gradename);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                this.read.Close();
                this.closecon();
            }
        }
         //
         //以上是在db类里写的查询方法
         //        private void AddStudentForm_Load(object sender, EventArgs e)
        {
            Db dd = new Db();
            dd.selsetgrade();
            
        }//需要调用数据的窗体的load事件          rt 不知道怎么弄的 每次打开窗体那个libglass里都是空白的 但是修改为静态的就可以,不过在窗体设计的界面就看不到了是为什呢?是不是要传参啊 我是新人 不明白的多 请尽量解释的详细一点

解决方案 »

  1.   

    1 按照LZ的写法,只能用静态的,或者写在(拥有添加元素控件的)窗体加载事件中
    2 这样的结构不够清晰,要优化,多看多做多练,自然就好了//example:
    private  AddStudentForm _Load(object sender,EventArgs e)
    {
      try
      {
        //SqlConnection conn = new SqlConnection("link database string");
        conn();//打开连接 
        String sql = "select gradename from grade"; 
        cmd = new SqlCommand(sql, con); 
        read = cmd.ExecuteReader(); 
        string gradename = ""; 
        while (read.Read()) 
        { 
           gradename = (string)read["gradename"]; 
           libglass.Items.Add(gradename); 
        } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
         this.read.Close(); 
         this.closecon(); 
      } }
      

  2.   

    ......
    AddStudentForm add = new AddStudentForm();
    ......
    add.libglass.Items.Add(gradename);
    ......
    //以上是在db类里写的查询方法private void AddStudentForm_Load(object sender, EventArgs e)
    {
       Db dd = new Db();
       dd.selsetgrade();
    }//需要调用数据的窗体的load事件注意红色的部分!!!
    假设你的AddStudentForm_Load方法的窗体为AddStudentForm1,则你调用selsetgrade方法后,在selsetgrade方法中新建了AddStudentForm2,而LZ的gradename是Add到AddStudentForm2中去的;你认为AddStudentForm1上会显示吗???3楼的正解,如果LZ非要"数据层要分开来写"的话;代码如下:public List<string> selsetgrade()//查询年级
    {
      List<string> result = new List<string>();
      try
      {
        //SqlConnection conn = new SqlConnection("link database string");
        conn();//打开连接 
        String sql = "select gradename from grade"; 
        cmd = new SqlCommand(sql, con); 
        read = cmd.ExecuteReader(); 
        string gradename = ""; 
        while (read.Read()) 
        {
          gradename = (string)read["gradename"];
          result.add(gradename);
        }
        return result;
      } 
      catch (Exception ex) 
      { 
        MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
        this.read.Close();
        this.closecon();
      }
    }
    //
    //以上是在db类里写的查询方法
    //private void AddStudentForm_Load(object sender, EventArgs e)
    {
      Db dd = new Db();
      foreach(string gradename in dd.selsetgrade())
      {
        libglass.Items.Add(gradename);
      }           
    }//需要调用数据的窗体的load事件