将listview列值与另一个listview列值进行比较,如果匹配,则显示列值而不是其他值

时间:2012-08-08 06:57:18

标签: c# winforms listview compare contacts

我有一个列表视图,显示联系人 - namenumber是列。我有另一个列表视图,显示消息 - phone number(收到消息的地方),message是列。现在,当我填充我的消息列表视图时,我想将电话号码列与联系人列表号列进行比较,然后如果匹配则将消息列表视图的号码列替换为联系人姓名。

这可能吗?请提供解决方案。

2 个答案:

答案 0 :(得分: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栏中有编号。

答案 1 :(得分:0)

我首先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.NumberMessage.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
    }
});

注意:未经测试。只是可以解决的问题。

希望这有帮助。