How to dynamically add rows to generated columns horizontally

I need to add lines to:

 dtbl = new DataTable();
 dtbl.Columns.Add("Ad.No", typeof(String)); alignment[0] = 'C'; width[1] = 40;
 dtbl.Columns.Add("AdmissionDate", typeof(String)); alignment[1] = 'C'; width[2] = 50;
 dtbl.Columns.Add("Name", typeof(String)); alignment[2] = 'L'; width[3] = 100;
 dtbl.Columns.Add("Class", typeof(String)); alignment[3] = 'C'; width[5] = 40;
 for (int i = model.FromYear; i <= model.ToYear; i++)
 {
   for (int j = model.FromMonth; j <= model.ToMonth; j++)
   {
     for (int k = model.FromDay; k <= model.ToDay; k++)
     {
       dtbl.Columns.Add(Common.CommonUtility.GetShortMonthName(j)+" "+k, typeof(String)); alignment[4] = 'C'; width[5] = 40;
     }
   }

   for (int i = model.FromYear; i <= model.ToYear; i++)
   {
     for (int j = model.FromMonth; j <= model.ToMonth; j++)
     {
       for (int k = model.FromDay; k <= model.ToDay; k++)
       {
         //  dtbl.Rows.Add(dt[j]=std.value);
         //   foreach (var r in std.value){

         dtbl.Rows.Add(dt["Ad.No"] = std.AdmissionNo, dt["AdmissionDate"] = Convert.ToDateTime(std.date.ToString()).ToString("dd/MM/yyyy"), dt["Class"] = std.Class, dt["Name"] = std.StudentName,dt[j]=std.value);
       }
     }

I need to add rows to a column cell like p A p A

+4
source share
1 answer

When creating columns, the column name may also contain a year that will be unique:

private GetColumnName(int year, int month, int day)
{
  return year.ToString() + " " + Common.CommonUtility.GetShortMonthName(month) + " " + day;
}

If it stdcontains a value for one date, this will help if the stddate also appears in the record (or the three properties year, month, day).

Then the list stdloaded from the database can be grouped by row identifier (is this Ad.No?), And each group is processed to fill one row:

var stdList = ... select from DB;

var stdGroups = stdList.GroupBy(x => x.AdmissionNo);

foreach(var group in stdGroups)
{
  var stds = group.ToList();

  var row = dtbl.NewRow(); // a new row of untyped data table
  row["Ad.No"] = stds.First().AdmissionNo;
  // ...set also the other properties

  for (int i = model.FromYear; i <= model.ToYear; i++)
  {
    for (int j = model.FromMonth; j <= model.ToMonth; j++)
    {
      for (int k = model.FromDay; k <= model.ToDay; k++)
      {
        var std = stds.Single(x => x.Year == i && x.Month == j && x.Day == k);
        row[GetColumnName(i,j,k)] = std.value;

       }
     }
  }

  dtbl.Rows.Add(row);
}
+1
source

Source: https://habr.com/ru/post/1622312/


All Articles