将列表复制到SpreadSheetGear Irange

时间:2013-03-16 14:44:39

标签: list entity-framework-4 spreadsheetgear

我有以下代码:

        using (CPASEntities ctx = new CPASEntities())
        {
            IWorksheet ws = wb.Worksheets[0];
            ws.Name = "Summary";
            var tsm = (from x in ctx.tblTimesheetMasters
                       where x.TSID == TSID
                       select new
                       {
                           TimesheetID = x.TSID,
                           Comments = x.TSComments,
                           Vendor = x.tblVendor.Vendor_Name,
                           StartDate = x.TSStartDate,
                           Author = x.TSAuthor,
                           Approver = x.TSApprover,
                           Override_Approver = x.TSOverrideApprover,
                           Status = x.tblTimesheetStatu.TSStatusDesc
                       }
                      ).ToList();
            SpreadsheetGear.IRange range = ws.Cells["A1"];
            // I want to copy the entire tsm list to this range, including headings.

        }

正如评论所述,我想把整个列表放在从A1开始的ws工作表中。我包含代码,以防更容易使用不同的构造。 FWIW,只有一个条目...... TSID是主键。当然,如果这很重要,我可以使用.FirstorDefault()构造。我认为这不重要。

1 个答案:

答案 0 :(得分:1)

你的范围只有一个细胞。您需要一个足够大的范围来包含列表填充的所有单元格。

要使用列表填充工作表,您可以执行以下操作。

    int iRow = 0;
    int iCol = 0;
    if (tsm.Count() > 0)
    {
      foreach (var prop in tsm[0].GetType().GetProperties())
      {
        ws.Cells[iRow, iCol].Value = prop.Name;
        iCol++;
      }
      iRow++;
      foreach (var t in tsm)
      {
        iCol = 0;
        foreach (var prop in t.GetType().GetProperties())
        {
          ws.Cells[iRow, iCol].Value = prop.GetValue(t, null);
          iCol++;
        }
        iRow++;
      }
    }

如果你想要一个范围,你可以添加这一行。

SpreadsheetGear.IRange range = ws.Cells[0, 0, iRow - 1, iCol - 1];