Есть вопрос не для новичков - C#
Формулировка задачи:
я написал функцию которая содаёт динамически ДатаТайбл, но я определяю зарание известный класс, она отуда тянет проперти и создает ДатаТайбл.
вопрос такой как сделать чтоб я мог создавать с любого обЪекта такой дт?
public static class DataTableCreator
{
#region DataTableCreator
public static DataTable Creator(IList<Product> collection, string[] FieldNames)
{
DataTable dt = new DataTable();
DataColumn[] dc_items_holders = new DataColumn[FieldNames.Count()];
for (int i = 0; i < FieldNames.Count(); i++)
{
dc_items_holders[i] = new DataColumn(FieldNames[i]);
dc_items_holders[i].DataType = System.Type.GetType("System.String");
}
//add data to table
dt.Columns.AddRange(dc_items_holders);
DataRow[] rows_col = new DataRow[collection.Count()];
for (int i = 0, data_index = 0; i < rows_col.Count(); i++)
{
rows_col[i] = dt.NewRow();
rows_col[i][FieldNames[data_index++]] = collection[i].Name;
rows_col[i][FieldNames[data_index++]] = collection[i].Price;
dt.Rows.Add(rows_col[i]);
data_index = 0;
}
return dt;
}
#endregion
}Решение задачи: «Есть вопрос не для новичков»
textual
Листинг программы
public static DataTable CreateTableWithRows(List<object> objClass)
{
//Creating Table
DataTable dtTemp = new DataTable();
Type tmain = objClass[0].GetType();
PropertyInfo[] propsmain = tmain.GetProperties();
foreach (PropertyInfo pmn in propsmain)
{
dtTemp.Columns.Add(new DataColumn(pmn.Name, pmn.PropertyType));
}
// Filling Records
foreach(object o in objClass)
{
Type t = o.GetType();
PropertyInfo[] props = t.GetProperties();
DataRow row = dtTemp.NewRow();
foreach (PropertyInfo p in props)
{
if (p.CanRead)
{
row[p.Name] = p.GetValue(o, null);
}
}
dtTemp.Rows.Add(row);
}
return dtTemp;
}
Sample:
.....
// Object Class
public class Company
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public DateTime DateCreated { get; set; }
}
.....
// Using in Code
private void Button1_Click(object sender, EventArgs e)
{
List<Company> companies = new List<Company>();
for (int i = 0; i < 10; i++)
{
Company c = new Company();
c.CompanyId = i;
c.CompanyName = "New Company" + i.ToString();
c.DateCreated = DateTime.Now;
companies.Add(c);
}
......
datagridview1.DataSource = SomeClass.CreateTableWithRows(companies);
}