【发布时间】:2018-11-27 00:31:07
【问题描述】:
所以我有来自各种 API 调用的响应数据。这些调用中的每一个都返回一个对象列表,并且每个对象还可以包含一个对象列表。由于有许多不同的对象类型,该方法必须是通用的。我的目标是拥有一个包含对象属性的数据网格,如果该属性是另一个列表,则添加一个数据网格控件。
public static DataTable GetDataGrid(this IList list)
{
var dt = new DataTable();
foreach (var o in (IEnumerable)list)
{
var r = dt.NewRow();
foreach (var f in o.GetType().GetProperties())
{
if (!dt.Columns.Contains(f.Name))
{
dt.Columns.Add(f.Name);
}
var value = f.GetValue(o);
Type t = value.GetType();
// if it is an integer list just concat the values
if (value is IList<int?>)
{
r[f.Name] = (String.Join<int?>(",", (IEnumerable<int?>)value));
}// if it is another object list create a datagrid
else if (value is IList)
{
// CREATE A DATA GRID
}// if it is not a list just add the value
else
{
r[f.Name] = value;
}
}
dt.Rows.Add(r);
}
return dt;
}
这就是我得到的结果,但这也只是一个数据表
编辑: Example
所以我想要下表中显示的原始数据。系统内存、进程内存和 GPU 都是不同类型的对象,但我希望它们成为各自单元格中自己的表。如果这不可能,我可以存储某种触发器来打开表。
【问题讨论】:
-
从列表中创建数据网格,您是否告诉您的网格是 1 列网格,您的问题并未阐明您使用数据构建的结构。可以举几个例子吗
-
在单元格中嵌套数据网格将是一个糟糕的 UI/UX,其他人都使用 Treeviews 进行这种“递归”加载。
-
它甚至是您开始使用的数据表吗?为什么是数据网格?您真的希望在动态结构中编辑动态类型吗?我认为动态构建树视图可能是您最好的选择。
-
它以包含属性的对象列表和其他对象列表开始。那么树视图会是更好的方法吗?