小弟做三层架构的一个项目发生如下错误//根据班级名称查询学生信息
        public DataSet SearchStudentInfoByClassName(string ClassName)
        {
            DataSet objDataSet = null;
            try
            {
                objDataSet = new DataSet();
                _objConn.Open();
                SqlDataAdapter objSqlAda = new SqlDataAdapter("[dbo].[usp_SearchStuInfoByClassName]", _objConn);
                objSqlAda.SelectCommand.CommandType = CommandType.StoredProcedure;
                SqlParameter spt = new SqlParameter("@ClassName", SqlDbType.VarChar, 50);
                spt.Direction = ParameterDirection.Input;
                spt.Value = ClassName;
                objSqlAda.SelectCommand.Parameters.Add(spt);
                objDataSet = new DataSet();
                objSqlAda.Fill(objDataSet, "StudentInfo");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                _objConn.Close();
            }
            return objDataSet;
        }//根据班级名称查询学生信息
        public DataSet SearchStudentInfoByClassName(string ClassName)
        {
            StudentService ss = new StudentService();
            return ss.SearchStudentInfoByClassName(ClassName);
        }
我想在ListView中显示DataSet的值,为什么遍历集合时显示不出来呢? 我的ListView的View属性为Details 我添加了列名,但是一遍历就不显示了,下面是我写的函数 private void ShowStuInfo() 
        { 
            StudentManager sm = new StudentManager(); 
            DataSet objDataSet = sm.SearchStudentInfoByClassName("应用电子系1班"); 
            this.lvwStudent.Clear(); 
            foreach (DataRow row in objDataSet.Tables[0].Rows) 
            { 
                ListViewItem lstItems = new ListViewItem(); 
                lstItems.SubItems.Clear(); 
                lstItems.SubItems[0].Text = row["姓名"].ToString(); 
                lstItems.SubItems.Add(row["学号"].ToString()); 
                lstItems.SubItems.Add(row["性别"].ToString()); 
                lstItems.SubItems.Add(row["出生年月"].ToString()); 
                lstItems.SubItems.Add(row["班级"].ToString()); 
                lstItems.SubItems.Add(row["备注"].ToString()); 
                lvwStudent.Items.Add(lstItems); 
            } 
        } 但是在OnLoad事件中就是不显示了 

解决方案 »

  1.   

    listview绑定datatable,仅供参考!
    private void button1_Click(object sender, EventArgs e)
            {
                listView1.Items.Clear();
                listView1.Columns.Clear();
                SqlConnection con = new SqlConnection("server=.;database=pubs;user id=sa;password=123");
                con.Open();
                DataSet dst = new DataSet();
                SqlCommand cmd =new SqlCommand ("select title_id,type from titles",con );
                SqlDataAdapter dap = new SqlDataAdapter(cmd);
                dap.Fill(dst);
                con.Close();
                this.listView1.Columns.Add("ID编号", 80, HorizontalAlignment.Center);
                this.listView1.Columns.Add("类型", 80, HorizontalAlignment.Center);//增加列标题
                listView1.View = View.Details;
                listView1.GridLines = true;//显示网格线。。
                string[] str = new string[2];
                foreach (DataRow row in dst.Tables[0].Rows)
                {
                    str[0] = row["title_id"].ToString();
                    str[1] = row["type"].ToString();
                    ListViewItem item = new ListViewItem(str, 0);
                    listView1.Items.Add(item);
                }
            } 
      

  2.   

    如果是web的,在page_load中将遍历操作放在if(!IsPostBack){}里
      

  3.   

    我现在还没学Web的只是普通的WinForms程序
      

  4.   

    ListViewItem lstItems = new ListViewItem(); 
                    lstItems.SubItems.Clear(); 
    位置放错了吧,不应该放在foreach中。
      

  5.   

    private void ShowStuInfo() 
            { 
                StudentManager sm = new StudentManager(); 
                DataSet objDataSet = sm.SearchStudentInfoByClassName("应用电子系1班"); 
                this.lvwStudent.Clear(); 
                foreach (DataRow row in objDataSet.Tables[0].Rows) 
                { 
                    ListViewItem lstItems = new ListViewItem(); 
                    lstItems.SubItems.Clear(); 
                    lstItems.SubItems[0].Text = row["姓名"].ToString(); 
                    lstItems.SubItems.Add(row["学号"].ToString()); 
                    lstItems.SubItems.Add(row["性别"].ToString()); 
                    lstItems.SubItems.Add(row["出生年月"].ToString()); 
                    lstItems.SubItems.Add(row["班级"].ToString()); 
                    lstItems.SubItems.Add(row["备注"].ToString()); 
                    lvwStudent.Items.Add(lstItems); 
                } 
            } 
    改成
    private void ShowStuInfo() 
            { 
                StudentManager sm = new StudentManager(); 
                DataSet objDataSet = sm.SearchStudentInfoByClassName("应用电子系1班"); 
                this.lvwStudent.Clear(); 
                foreach (DataRow row in objDataSet.Tables[0].Rows) 
                { 
                    ListViewItem lstItems = new ListViewItem(); 
                    lstItems.SubItems.Clear(); 
                    lstItems.SubItems.Add(row["姓名"].ToString()); 
                    lstItems.SubItems.Add(row["学号"].ToString()); 
                    lstItems.SubItems.Add(row["性别"].ToString()); 
                    lstItems.SubItems.Add(row["出生年月"].ToString()); 
                    lstItems.SubItems.Add(row["班级"].ToString()); 
                    lstItems.SubItems.Add(row["备注"].ToString()); 
                    lvwStudent.Items.Add(lstItems); 
                } 
            } 
    你试一下