填充Listview:每条记录一个项目

时间:2015-02-02 17:20:57

标签: c#

我正在尝试过滤来自db的值并将它们列在列表视图中。但我想我错过了一些东西。代码采用listview和字符串值。一旦用户单击搜索按钮,就会列出所有相应的值(每个记录一行)。但相反,如图所示,两个字段似乎缺失了。

我正在尝试调试但是我找不到任何解决方案。那么如何为每行/记录创建一个ListView项目?

enter image description here

 public void AraByTel(ListView listView, string str)
  {
      SqlCommand cmd = null;
      SqlConnection con = null;



      string insertCmd = " Select DoktorId,İletisim,Sikayet from Hastalar where İletisim like '%" + str + "%'";
          try
          {
              using (con = Baglanti.Baglan())
              {
                  using (cmd = new SqlCommand(insertCmd, con))
                  {

                      if (con.State == ConnectionState.Closed)
                      {
                          con.Open();
                      }
                      SqlDataReader dr = cmd.ExecuteReader();
                      int i = 0;
                      if (dr.HasRows)
                      {

                          while (dr.Read())
                          {
                              listView.Items.Add(dr["DoktorId"].ToString());
                              listView.Items[0].SubItems.Add(dr["Sikayet"].ToString());
                              listView.Items[0].SubItems.Add(dr["İletisim"].ToString());
                             i++;
                          }
                      }
                      dr.Close();
                  }
              }

2 个答案:

答案 0 :(得分:2)

此行为返回的每一行创建并添加新的LVI:

listView.Items.Add(dr["DoktorId"].ToString());

但是:

listView.Items[0].SubItems.Add(dr["Sikayet"].ToString());
listView.Items[0].SubItems.Add(dr["İletisim"].ToString());

这些是为所有行添加子项到第一个项目(Items[0])一遍又一遍。由于您只有3个列标题,因此您只能看到前2个子项(您可以通过添加没有列标题的子项来隐藏" LV中的内容 - 这是您的代码意外执行的操作)。

您可能希望i作为索引而不是0,但没有真正的理由手动索引它:

ListViewItem lvi = new ListViewItem();
lvi.Text = dr["DoktorId"].ToString();
// add the sub item data to this LVI
lvi.SubItems.Add(dr["Sikayet"].ToString());
lvi.SubItems.Add(dr["İletisim"].ToString());

// add the complete LVI with sub items to the control:
listView.Items.Add(lvi);

答案 1 :(得分:0)

你应该只是databind to the listview而不是以这种方式循环并添加它们。如果使用SqlDataSource执行此操作,则可以在SqlDataSource上应用Filtering