如何在 C# 中显示对象的数据

本文关键字:对象 数据 显示 | 更新日期: 2023-09-27 18:33:33

这是我的代码:

void Main() {
    List<Restaurant> RestaurantData = new List<Restaurant>();
}
class Restaurant {
    public int Id;
    public List<Complaint> Complaints = new List<Complaints>();
}
class Complaint {
    public string Name;
    public string Address;
    public int Age;
    public DateTime ComplaintDate;
}

我想在 DataGridView 控件中呈现 RestaurantData 中包含的数据。首先,我想显示餐厅的 ID,然后是针对餐厅的投诉数量,使其看起来像这样(其中 ID 在 A 列中,名称在 B 列中,依此类推(:

ID1、姓名、地址、年龄、日期(空格(, 姓名, 地址, 年龄, 日期(空格(, 姓名, 地址, 年龄, 日期ID2,姓名,地址,年龄,日期(空格(, 姓名, 地址, 年龄, 日期(空格(, 姓名, 地址, 年龄, 日期

每家餐厅至少有1起投诉,有些餐厅可能有很多投诉。 但在所有情况下,我希望餐厅的ID只出现一次(随之而来的是投诉(。 我过去对 DataGridView 的使用仅限于 dataGridView1.DataSource =(某个数组(。但是,我这次要呈现的信息显然不是一个数组,所以我被卡住了。

 var ds = (from r in RestaurantData
           from c in RestaurantData.Complaint
           select new {Id = r.Id, Address =c.Address, Age = c.Age, Name = c.Name, Date = c.ComplaintDate}
             ).ToList();
    dataGridView1.DataSource = ds;

目前,这会用相应的餐厅 ID 填充每一行。 如何调整上述查询,使餐厅 ID 仅显示一次?

如何在 C# 中显示对象的数据

到了。 你几乎完全拥有你想要的东西,并且正在一个合适的庄园里得到它,但你真正需要知道的是,一个特定的投诉是否是该列表中的第一项。 获得它的方法是在从具有索引作为参数的complaints中进行选择时,使用 Select 的重载。 为此,您需要使用方法语法,而不是查询语法,以便 这占了大部分更改。

一旦你调整了指数ID就是一个相当微不足道的检查。

var data = restaurantData.SelectMany(restaurant =>
    restaurant.Complaints.Select((complaint, index) => new
    {
        ID = index == 0 ? restaurant.Id.ToString() : "",
        complaint.Name,
        complaint.Address,
        complaint.Age,
        Date = complaint.ComplaintDate,
    }));