vb.net linq 能够对listviewitem进行操作么

clear_zero 2011-06-21 12:51:09
我是linq小白,想请教个问题

我现在需要根据某几个显示选项来设置listview的显示内容。比如说可以显示Category=1的所有项目,可以显示Category=1 or Category=2...的所有项目。

我的想法是把所有项目(如果我的项目clsA)放到一个大的collection里面,然后通过linq作其相应属性Category查找,把结果显示在listview里面。我看到listview里面.items.addrange可以对应一个listitem数组;同时listviewitemcollection本身就是个类。

我会用最简单的for each loop,请问如果用linq怎么写比较好

谢谢
...全文
144 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2011-06-21
  • 打赏
  • 举报
回复
data.ForEach(listView1.Items.Add(x));
=>
data.ForEach(x => listView1.Items.Add(x));
threenewbee 2011-06-21
  • 打赏
  • 举报
回复
var data = listView1.Items.Cast<ListViewItem>().Where(x => x.SubItems[1].Text == "1").ToList();
listView1.Items.Clear();
data.ForEach(listView1.Items.Add(x));
q107770540 2011-06-21
  • 打赏
  • 举报
回复
clear_zero 2011-06-21
  • 打赏
  • 举报
回复
我解决了

Dim arrLvItem As Generic.IEnumerable(Of ListViewItem) = From lvItem As ListViewItem In m_lvwItems Where lstCondition.Contains(lvItem.SubItems(1).Text) Order By lvItem.Text


我发现Generic.IEnumerable和IEnumerable是不一样的,我原来卡在那里了

我比较笨,让两位费心了

谢谢
q107770540 2011-06-21
  • 打赏
  • 举报
回复
当要显示多个Category时 可以先将Category ID放在一个数组内:
var list=new string[]{"1","2","3"};

var data = listView1.Items.Cast<ListViewItem>().Where(x =>list.Contains(x.SubItems[1].Text)).ToList();
listView1.Items.Clear();
data.ForEach(x=>listView1.Items.Add(x));
clear_zero 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 caozhy 的回复:]

引用 15 楼 clear_zero 的回复:
for each是可以用,但是如果我想加个progressbar的话,没有count可以用阿

你可以用 Aggregate() 方法来累计当前的进度。
[/Quote]

这个怎么用阿,我现在的list里面是listviewitem,不知道怎么找到count

能不能给个例子呢?

谢谢
threenewbee 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 clear_zero 的回复:]
for each是可以用,但是如果我想加个progressbar的话,没有count可以用阿
[/Quote]
你可以用 Aggregate() 方法来累计当前的进度。
clear_zero 2011-06-21
  • 打赏
  • 举报
回复
for each是可以用,但是如果我想加个progressbar的话,没有count可以用阿
clear_zero 2011-06-21
  • 打赏
  • 举报
回复

Dim arrLvItem = From lvItem As ListViewItem In m_lvwItems Where lstCondition.Contains(lvItem.SubItems(1).Text) Order By lvItem.Text
lvFixCondition.Items.Clear()
For Each lv As ListViewItem In arrLvItem
lvFixCondition.Items.Add(lv)
Next

其中lvFixCondition是listview
clear_zero 2011-06-21
  • 打赏
  • 举报
回复
我用了这个

Dim arrLvItem = From lvItem As ListViewItem In m_lvwItems Where lstCondition.Contains(lvItem.SubItems(1).Text) Order By lvItem.Text
lvFixCondition.Items.Clear()
For Each lv As ListViewItem In arrLvItem
lvFixCondition.Items.Add(lv)
Next
成功显示了,请大牛鉴定下是不是规范?

再次感谢
threenewbee 2011-06-21
  • 打赏
  • 举报
回复
data.ForEach(x=>listView1.Items.Add(x))

明显不对

data.ForEach(Function(x) listView1.Items.Add(x))
q107770540 2011-06-21
  • 打赏
  • 举报
回复
工具转的 不知道对不对
q107770540 2011-06-21
  • 打赏
  • 举报
回复
Imports System

Public Class MyClass
Shared Sub Main(ByVal args() As String)
Dim list As var = New String()
{
"1","2","3"
}


Dim data As var = listView1.Items.Cast<ListViewItem>().Where(x = >list.Contains(x.SubItems(1).Text)).ToList()
listView1.Items.Clear()
data.ForEach(x=>listView1.Items.Add(x))
End Sub
End Class

'----------------------------------------------------------------
' Converted from C# to VB .NET using CSharpToVBConverter(1.2).
' Developed by: Kamal Patel (http://www.KamalPatel.net)
'----------------------------------------------------------------
clear_zero 2011-06-21
  • 打赏
  • 举报
回复
我写到这里了

Dim arrLvItem = From lvItem As ListViewItem In m_lvwItems Where lstCondition.Contains(lvItem.SubItems(1).Text) Order By lvItem.Text
lvFixCondition.Items.Clear()


其中lvFixCondition是我的listview,
现在有两个问题
1.怎么把arrLvItem里面的东西给listview?语法卡在这里了。如果arrLvItem里面没有值会不会出问题?
2.arrLvItem是没有数据类型的,也就是object类型。这样写是不是对的?

谢谢
threenewbee 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 clear_zero 的回复:]
引用 1 楼 caozhy 的回复:

C# code
var data = listView1.Items.Cast<ListViewItem>().Where(x => x.SubItems[1].Text == "1").ToList();
listView1.Items.Clear();
data.ForEach(listView1.Items.Add(x));

我的cat……
[/Quote]
嗯,的确。向督察学习!
clear_zero 2011-06-21
  • 打赏
  • 举报
回复
我正在摸索中哈,从c#翻译过去
clear_zero 2011-06-21
  • 打赏
  • 举报
回复
有vb.net的语法例子么?

不胜感谢
q107770540 2011-06-21
  • 打赏
  • 举报
回复
3楼的不可以么
clear_zero 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caozhy 的回复:]

C# code
var data = listView1.Items.Cast<ListViewItem>().Where(x => x.SubItems[1].Text == "1").ToList();
listView1.Items.Clear();
data.ForEach(listView1.Items.Add(x));
[/Quote]
我的category其实是2个checkbox,当两个全部选中的话,就是显示category=1 or category=2
你的这段话,如果如果先显示了category=1的,然后要是显示category=1 or category=2的就找不回来了

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧