【发布时间】:2020-11-05 08:21:41
【问题描述】:
我有一个 DataGrid,我需要将它转换为一个 DataTable。问题是我需要能够动态获取我的 DataSource 的类型。网格 DataSource 的类型为“Observable”,这是我项目中的一个类,但我的任务是能够动态创建 DataTable,而无需仅使用 DataSource 指定类型。如何生成一个可以用来放置在<T> 中的方法,而不会出现错误“'mytype' is a variable but is used like a type”。
Type mytype = Grid_Job.DataSource.GetType();
DataTable dt = CreateDataTable<mytype>((IEnumerable<mytype>)Grid_Job.DataSource);
public static DataTable CreateDataTable<T>(IEnumerable<T> list)
{
Type type = typeof(T);
var properties = type.GetProperties();
DataTable dataTable = new DataTable();
foreach (PropertyInfo info in properties)
{
dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType));
}
foreach (T entity in list)
{
object[] values = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
{
values[i] = properties[i].GetValue(entity);
}
dataTable.Rows.Add(values);
}
return dataTable;
}
我的 Observable 类是
public class Observable
{
public int JobNo { get; set; }
public string JobName { get; set; }
public string JobDescription { get; set; }
public string Job_Type { get; set; }
public string Job_Status { get; set; }
}
【问题讨论】:
-
你能展示你的
Observable类吗?它是否实现了`IEnumerable'? -
是的,当我使用 IEnumerable
代码工作得很好,键入 mytype = Grid_Job.DataSource.GetType();正确返回“Observable”,但我不能在代码中使用它。 -
DataSource中可能存在的 实际 类型是什么?这很重要,因为有多种方法可以做到这一点,并且在某些情况下需要使用一些特别相关的抽象。所以:如果你做了Grid_Job.DataSource.GetType():那是什么? -
所以我使用了 string s = mytype.ToString();并且字符串 s 按字面意思返回 "System.Collections.ObjectModel.ObservableCollection' 1 [ERP_UI.Job.Observable]" 其中 ERP_UI 是我的项目的名称,Job 是包含 Observable 类的文件夹
-
和 myType.Name 返回“Observable”
标签: c# .net generics reflection datatable