我通过silverlight子窗口将一些参数传递到一个aspx页面,该页面以pdf格式托管我的水晶报告。它是文件夹上贴纸的打印功能。我已经创建了水晶报告以类似于打印输出表的模板。我创建了一个存储过程,它从数据库中获取信息以打印标签。
最主要的是,我创建了一个跳过功能,以便用户可以跳过适当数量的标签以在下一个上打印。我已对其进行了扩展,因此用户可以只打印一个标签或多个标签。
所以我想使用一个 foreach 循环,所以一个标签进来,它打印一个标签,多个标签进来,它打印多个标签。除了当我运行它时,我得到错误集合已修改,枚举操作可能无法执行。这是创建表和跳过代码。
try
{
_skip = Request.QueryString["_skip"];
_Report = Request.QueryString["_Report"];
_jobnum = Request.QueryString["_jobnum"];
jobnum1 = Request.QueryString["jobnum1"];
jobnum2 = Request.QueryString["jobnum2"];
addedBy = Request.QueryString["addedBy"];
date = Request.QueryString["date"];
// Create Table
tb = new DataTable();
tb.Columns.Add("FileName", Type.GetType("System.String"));
tb.Columns.Add("PieceType", Type.GetType("System.String"));
tb.Columns.Add("PieceNumber", Type.GetType("System.String"));
tb.Columns.Add("JobNumber", Type.GetType("System.String"));
tb.Columns.Add("OpenDate", Type.GetType("System.String"));
tb.Columns.Add("Market", Type.GetType("System.String"));
tb.Columns.Add("MarketYear", Type.GetType("System.String"));
tb.Columns.Add("BusinessName", Type.GetType("System.String"));
int length;
int.TryParse(_skip, out length);
length = Convert.ToInt16(_skip);
// Populate Blank Rows to skip labels
for (int i = 0; i < length; i++)
{
dr = tb.NewRow();
tb.Rows.Add(dr);
}
//Create rows depending on how many jobs come in.
foreach (DataRow drJob in tb.Rows)
{
dr = tb.NewRow();
dr["FileName"] = drJob["PieceType"].ToString() + drJob["PieceNumber"].ToString();
dr["PieceType"] = drJob["PieceType"].ToString();
dr["PieceNumber"] = drJob["PieceNumber"].ToString();
dr["JobNumber"] = drJob["JobNumber"].ToString();
dr["OpenDate"] = drJob["OpenDate"].ToString();
dr["Market"] = drJob["Market"].ToString();
dr["MarketYear"] = drJob["MarketYear"].ToString();
dr["BusinessName"] = drJob["BusinessName"].ToString();
tb.Rows.Add(dr);
}
ShowPDF(tb);
}
catch (Exception ex)
{
}
因此,在捕获期间,它会显示该错误。我试图在 tb.Rows 的末尾添加一个 .ToList() 但它不受支持。我搜索了一下并尝试了以下代码
foreach (DataRow drJob in tb.Rows.Cast<DataRow>().ToList())
这部分实际上已经完成,但生成了空白标签,并为我选择跳过的数量创建了标签。(它会跳过“9”行/表格,然后生成“9”标签进行打印)
我的问题是,如何将 foreach 循环修改为 1) 没有该错误和 2) 产生正确数量的标签,无论是 1 个还是 10 个。我猜测修改长度(跳过)会导致集合被修改,但如果是这样,我如何在调整参数差异的同时为它创建一个单独的列表(.ToList())。它们通过两种不同的方式传递到同一个 aspx 顺便说一句。