如何在动态生成的列中水平添加行

4

我需要在里面添加行:

 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);
       }
     }

我需要在列单元格中添加行,例如p A p A。

std是什么类型的数据?它是表格中一行的数据吗? - Martin Staufcik
我正在从std中获取记录。 - RATHORE
那个最后的语句没有意义,请纠正它。(您似乎正在修改一个 DataRow 实例,同时将其添加到 DataTable 中,但是没有迹象表明您已经创建了一个新的 DataRow 实例。) - Richard
1个回答

1
在创建列时,列名可以包含年份以保证其唯一性:
private GetColumnName(int year, int month, int day)
{
  return year.ToString() + " " + Common.CommonUtility.GetShortMonthName(month) + " " + day;
}

如果std包含一个日期的值,那么如果std记录也提供这个日期(或三个属性年、月、日),将会很有帮助。
然后从数据库加载的std列表可以按行标识符(是广告编号吗?)分组,并处理每个组以填充一行:
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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接