【问题标题】:C# How to use a 'foreach' statement using a data source?C# 如何在数据源中使用“foreach”语句?
【发布时间】:2016-11-04 08:08:06
【问题描述】:

大家好,我已经制作了一个所有者绘制的列表框,其中添加了头像和用户朋友的姓名和电子邮件。我遇到了一点麻烦。基本上我有一个查询,它获取用户朋友的姓名和电子邮件,然后使用“query.ToList()”将查询添加到列表框数据源。我想要做的是为数据源中的每个朋友,我想要它,以便它创建一个新的列表框项。

代码:

        FriendsLb.DisplayMember = "Display";
        FriendsLb.ValueMember = "FirstName";
        FriendsLb.ValueMember = "LastName";
        FriendsLb.ValueMember = "Email";

        var query = from o in Globals.DB.Friends
                    where o.UserEmail == Properties.Settings.Default.Email
                    select new
                    {
                        FirstName = o.FirstName,
                        LastName = o.LastName,
                        Email = o.Email,

                        Display = string.Format(" {0} {1} - ({2})", o.FirstName, o.LastName, o.Email),
                    };

        FriendsLb.DataSource = query.ToList();

        foreach (object contact in FriendsLb.DataSource))
        {
            FriendsLb.Items.Add(new Contacts(Properties.Resources.avatar, contact.ToString()));
        }

错误: 有任何想法吗?干杯

这是代码正确时的样子:

【问题讨论】:

  • 您不会将项目添加到绑定到数据源的控件; Contact 是否包含您为查询/DS 收集的信息?
  • 您是否在上次删除帖子的 DrawItem 事件中添加了 if (e.index > -1)
  • 不,不是,Contact 只获取头像和好友详细信息并返回
  • 您只能拥有一个 ValueMember。
  • 根据您发布的问题,DataGridView 将是更合适的控件,而不是 ListBox。

标签: c# winforms foreach listbox datasource


【解决方案1】:

您应该创建一个 DTO 或一个视图模型,然后像使用它一样使用它

public class Contact
{
  public string Firstname {get; set;}
  public string Lastname{get; set;}
  public string Email {get; set;}
  public string Display {get; set;}
}

    var query = from o in Globals.DB.Friends
                where o.UserEmail == Properties.Settings.Default.Email
                select new Contact
                {
                    FirstName = o.FirstName,
                    LastName = o.LastName,
                    Email = o.Email,

                    Display = string.Format(" {0} {1} - ({2})", o.FirstName, o.LastName, o.Email),
                };

将数据源添加到您的数据绑定控件,如下所示。同样,正如已经评论过的,您只能拥有一个 ValueMember 而不能拥有多个。

    FriendsLb.DataSource = query.ToList();
    FriendsLb.DisplayMember = "Display";
    FriendsLb.ValueMember = "Email";

【讨论】:

  • 谢谢!如何使用“foreach”语句将每个朋友添加到列表框中?
  • @richardj97,你实际上没有。如果有帮助,请参阅答案中的编辑。
猜你喜欢
  • 2015-07-11
  • 2017-01-26
  • 1970-01-01
  • 2023-03-30
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 2012-01-10
相关资源
最近更新 更多