2010-04-21 123 views
0

我现在正在改变这个问题!listview上的搜索功能

我已经搜索工作使用下列内容:

//check the array for a match 
     foreach (Delivery d in mainForm.myDeliveries) 
     { 
      if (d.DeliveryName == searchValue) 
      { 
       ListViewItem item = lstDeliveryDetails.Items.Add(d.DeliveryName); 
       item.SubItems.Add(d.DeliveryAddress); 
       item.SubItems.Add(d.DeliveryDay); 
       item.SubItems.Add(d.DeliveryTime); 
       item.SubItems.Add(d.DeliveryMeal); 
       item.SubItems.Add(d.DeliveryInstructions); 
       item.SubItems.Add(d.DeliveryStatus); 

      } 
     } 

我的问题是,什么是现在要查找所有其他价值的最好方式,做一个完整的搜索? 我知道我可以做,如果其他语句,并通过地址,日期,时间等

有没有更好的办法来实现这一目标? 而目前,用户必须输入整个名称才能得到结果,如果他们只输入名称的一部分,我可以吗?

回答

0

清除从你的列表视图中的所有项目和只添加符合搜索条件的那些:

lstDeliveryDetails.Clear(); 
for (int i = 0; i < myDeliveries.Count; i++) 
{ 
    Delivery d = (Delivery)mainForm.myDeliveries[i]; 

    if (d.DeliveryName == searchValue) 
     lstDeliveryDetails.Items.Add(d.DeliveryName); 
} 
+0

名称'item'在当前上下文中不存在 – sark9012 2010-04-21 10:13:54

+0

@Luke将其更改为lstDeliveryDetails.Items.Add(d.DeliveryName);同样你也要添加你的子项目。 – Amsakanna 2010-04-21 10:16:53

+0

哈哈,我意识到我的方式错误,然后看到你写的东西!出于某种原因,它不会在列表视图中返回任何内容:( – sark9012 2010-04-21 10:22:45

0

这样

更改您的显示方式,使得它接受发送列表参数(或阵列)
private void displayDeliveries(List<Delivery> deliveries) 

,并改变其定义相应

在你btnSearch获得列表中选择分娩的列表,并传递到displayDeliveries方法

虽然初始化你的ListView发送mainForm.myDeliveries作为参数

更新

从用户那里得到的关键字,并检查这样

if (d.DeliveryName.Contains(searchValue)) 

您也可以尝试通过渐进式搜索处理文本框的TextChanged事件,如果列表很小。