我在注册表类中有一个名为注册表的表。 它包含
- 编号、描述People_id
People_id 是 People 类中 People 表中的外键。 它包含
- id、姓名、birth_date
我需要在 DataGrid 中显示注册表表中的所有数据,并在注册表表中显示People_id的年龄(使用 birth_date 计算(。我已经可以检索所有注册表数据并将其显示在数据网格上,但我缺少年龄部分。
我尝试过这样的东西。检索注册表数据,获取出生日期,进行计算并仅使用年龄结果填充列表。然后,将两个 List 与 Concat 方法联接到一个名为 CombRegistryAge 的新列表中,如下面的第一种方法所示。
public List<object> RegistryJoinAge()
{
List<object> ResultAge = new List<object>();
List<Registry> ListRegistry = new Registry().LoadRegistry();
//method LoadRegistry retrieve all items in Registry table
foreach (var item in ListRegistry)
{
var age = AgeCalculation(item.People.birth_date);
ResultAge.Add(age);
}
List<object> CombRegistryAge = ListRegistry.Cast<object>().Concat(ResultAge).ToList();
return CombRegistryAge;
}
对于年龄计算方法,开始测试很简单
private int AgeCalculation(DateTime birthdate)
{
var todayIs = DateTime.Today;
int age = todayIs.Year - birthdate.Year;
return age;
}
但是当我在数据网格中使用列表梳理注册表调用该方法时
datagrid_fillData.ItemsSource = RegistryJoinAge();
我仍然在里面获取注册表数据,但没有年龄,我注意到,从数据网格中,它为计算的每个年龄添加了空行,但实际上,我需要将它们显示为单个行,就像在数据网格中这样。
- ID, 描述, People_id, 年龄
- 101, 通过, 1802, 35
这是我的疑问。也许这是列表的问题,因为我尝试在 concat 方法中反转列表顺序,但它显示并空网格。 任何帮助,不胜感激。
我建议您创建一个类UserRegistryModel
,以携带可以在datagrid
中绑定数据的数据。
public class UserRegistryModel
{
public int Number { get; set; }
public string Description { get; set; }
public int People_id { get; set; }
public int Age { get; set; }
}
使用Lambdaselect
使代码更清晰。
public List<UserRegistryModel> RegistryJoinAge()
{
List<UserRegistryModel> ListRegistry = new Registry().LoadRegistry()
.select(x => new UserRegistryModel()
{
Number = x.Number,
Description = x.Description,
People_id = x.People_id,
Age = AgeCalculation(x.People.birth_date)
}).ToList();
return ListRegistry;
}
最终回报UserRegistryModel
列表