Есть вопрос не для новичков - 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);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы