【问题标题】:Comparing listview column values with another listview column values and display the column value instead of other if it matches将 listview 列值与另一个 listview 列值进行比较,如果匹配则显示列值而不是其他值
【发布时间】:2012-08-08 06:57:18
【问题描述】:
我有一个显示联系人的列表视图-name 和number 是列。我有另一个列表视图显示 messages-phone number(从那里收到消息),message 是列。现在,当我填充我的消息列表视图时,我想将电话号码列与联系人列表号码列进行比较,然后如果匹配,则将消息列表视图的号码列替换为联系人姓名。
这可能吗?请提供解决方案。
【问题讨论】:
标签:
c#
winforms
listview
compare
contacts
【解决方案1】:
看看这对你有没有帮助:
if (messagelist.Items.Count > 0)
{
for (int i = 0; i < messagelist.Items.Count; i++)
{
string mnum = messagelist.Items[i].Text;
for (int j = 0; j < contactlist.Items.Count; j++)
{
if (contactlist.Items[j].SubItems[1].Text == mnum)
{
messagelist.Items[i].Text = contactlist.Items[j].Text;
}
}
}
}
我假设联系人列表的第二列中有数字。
【解决方案2】:
我会先join 两个lists 号码/电话号码:
var matchingList = (from c in ContactList
join m in MessageList on c.Number equals m.PhoneNumber
select new {ContactName = c.Name
, ContactNumber = c.Number
, Message = m.Message
, PhoneNumber = m.PhoneNumber } );
现在你有一个list,是所有匹配的Contact.Number 和Message.PhoneNumber。
现在您可以遍历项目并设置Name:
MessageList.Foreach( x =>
{
var matchedItem = matchingList.FirstOrDefault( y => y.Massage == x.Message && y.PhoneNumber == x.PhoneNumber);
if(matchedItem != null)
{
x.PhoneNumber = matchedItem.Name
}
});
注意:未经测试。只是一些工作。
希望这会有所帮助。