1

我正在尝试将存储过程listbox中的员工数据加载到表单加载事件中,ID并为每个事件分配一个图像。上面的代码是我迄今为止所拥有的。所以我在这里要做的是listview用我的数据阅读器中的数据填充数据。

SqlConnection conn = new SqlConnection(
                            @"Data Source=MyPC\Test;Initial Catalog=TEST5;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SELECT emp_first_name FROM Employees", conn);
cmd.CommandType = CommandType.Text;

SqlDataReader dr = cmd.ExecuteReader();

listView1.Items.Clear();

while (dr.Read())
{
    ListViewItem recs = new ListViewItem();

    recs.Text = dr["dept_name"].ToString();
    recs.Text = dr["emp_first_name"].ToString();
    recs.Text = dr["emp_last_name"].ToString();
    recs.Text = dr["emp_email"].ToString();
    recs.Text = dr["emp_phone"].ToString();
    recs.Text = dr["emp_position"].ToString();
    recs.Text = dr["emp_address1"].ToString();
    recs.Text = dr["emp_address2"].ToString();
    recs.Text = dr["emp_city"].ToString();
    recs.Text = dr["emp_state"].ToString();
    recs.Text = dr["emp_postal_code"].ToString();

    recs.Tag = dr["empId"].ToString();
    recs.ImageIndex = 0;
    listView1.Items.Add(recs);
}

先感谢您。

4

2 回答 2

2

您的查询当前仅返回一个字段:

SqlCommand cmd = new SqlCommand("SELECT emp_first_name FROM Employees", conn);

我猜你想要这个:

SqlCommand cmd = new SqlCommand("SELECT * FROM Employees", conn);

您需要打开连接并关闭一次性资源。您当前的代码不断替换该recs.Text属性,以至于您应该在列表中看到的唯一内容是“emp_postal_code”值。我怀疑您正在寻找类似的东西,您将用户名显示为 ListViewItem 的主要项目,然后将其他信息包含为该项目的子项目(在详细视图中显示时):

listView1.Items.Clear();

using (SqlConnection conn = new SqlConnection(...)) {
  conn.Open();
  using (SqlCommand cmd = new SqlCommand("SELECT * FROM Employees", conn)) {
    using (SqlDataReader dr = cmd.ExecuteReader()) {
      while (dr.Read()) {
        ListViewItem recs = new ListViewItem();

        recs.Text = dr["emp_first_name"].ToString() + " " +
                    dr["emp_last_name"].ToString();

        recs.SubItems.Add(dr["dept_name"].ToString());
        recs.SubItems.Add(dr["emp_email"].ToString());
        etc...

        recs.Tag = dr["empId"].ToString();
        recs.ImageIndex = 0;
        listView1.Items.Add(recs);
      }
    }
  }
}
于 2013-01-15T21:40:10.810 回答
0

我在这里看到几件事:

  1. 你永远不会打开连接:
  2. 您在阅读器中引用了许多未包含在语句的 select 子句中的字段。
  3. 您覆盖而不是附加到 ListViewItem 的文本属性,以便仅显示最后分配的属性值。
于 2013-01-15T22:51:34.007 回答