我正在尝试过滤来自db的值并将它们列在列表视图中。但我想我错过了一些东西。代码采用listview和字符串值。一旦用户单击搜索按钮,就会列出所有相应的值(每个记录一行)。但相反,如图所示,两个字段似乎缺失了。
我正在尝试调试但是我找不到任何解决方案。那么如何为每行/记录创建一个ListView项目?
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();
}
}
答案 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。