我有以下代码:
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()构造。我认为这不重要。
答案 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];