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

現在、クエリは 1 つのフィールド ID のみを返します:

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 の text プロパティに追加するのではなく上書きします。
于 2013-01-15T22:51:34.007 に答える