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

初学者关于ListView求解???
我在程序中单独输入以下代码运行正常: ListViewItem lviStus = new ListViewItem("aa");
 lviStus.SubItems.Add("1");
 lviStus.SubItems.Add("a");
 lviStus.SubItems.Add("c");
 this.lvStudent.Items.Add(lviStus);
可为什么写在一个循环里就不行了了?
 String sql = String.Format("select * from student where stu_uname like '%{0}%'", txtStu_name.Text);
   
  DBHelper.conn.Open();
  SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
  SqlDataReader dr = comm.ExecuteReader();
  lvStudent.Clear();
   
  if (!dr.HasRows)
  {
  MessageBox.Show("没有相信学员的信息");

  }
  else
  {
  while(dr.Read()) //单步调试是运行到了这里
  {

  ListViewItem lviStus = new ListViewItem("aa");



  //lviStus.SubItems.AddRange(new String[] {stu_name, stu_key, stu_state});
  //lviStus.SubItems.AddRange(new String[] { "aa", "bb", "cc" });
  lviStus.SubItems.Add("1");
  lviStus.SubItems.Add("a");
  lviStus.SubItems.Add("c");
  this.lvStudent.Items.Add(lviStus);
  }
  }
  dr.Close();
  DBHelper.conn.Close();
   


------解决方案--------------------
断点调试看哪一行代码出错。
在循环中定义
ListViewItem lviStus = new ListViewItem("aa");
这一句可能有问题。
因为最后lviStus 要被add到this.lvStudent.Items中。结果都是"aa"应该是会报错的。可以试试
ListViewItem lviStus = new ListViewItem("aa"+行号之类的);

------解决方案--------------------
首先肯定重复添加new ListViewItem("aa")不会报错
你先说明一下所谓的不行是什么不行,报错还是不执行呢,下断点跟踪调试
------解决方案--------------------
你循环应该不报错吧。ListViewItem lviStus = new ListViewItem("aa");放到循环外面
------解决方案--------------------
估计是重复定义的原因,不知道你循环怎么写的
------解决方案--------------------
把代码换成下面的试试
C# code

  ListViewItem lviStus;
  while(dr.Read()) //单步调试是运行到了这里
  {
      lviStus = new ListViewItem("aa");
      //lviStus.SubItems.AddRange(new String[] {stu_name, stu_key, stu_state});
      //lviStus.SubItems.AddRange(new String[] { "aa", "bb", "cc" });
      lviStus.SubItems.Add("1");
      lviStus.SubItems.Add("a");
      lviStus.SubItems.Add("c");
      this.lvStudent.Items.Add(lviStus);
  }

------解决方案--------------------
下断点,单步调试