Есть вопрос не для новичков - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д