我有一个包含4列的表,分别为JambRegNo
,UtmeScore
,ScreeningScore
和ScreeningStatus
。
用户将表格导出到excel后,在excel表中手动输入每个学生的筛选分数。
用户返回并上传excel表以更新其筛选分数的表,同时将每个上传的学生记录的ScreeningStatus
设置为true。
如何实现?
[HttpPost]
[Route("ImportUpload")]
public IactionResult ImportUpload(IFormFile reportfile)
{
string folderName = "Files";
string webRootPath = _hostingEnvironment.WebRootPath;
string newPath = Path.Combine(webRootPath,folderName);
// Delete Files from Directory
System.IO.DirectoryInfo di = new DirectoryInfo(newPath);
foreach (FileInfo filesDelete in di.GetFiles())
{
filesDelete.Delete();
}// End Deleting files form directories
if (!Directory.Exists(newPath))// Crate New Directory if not exist as per the path
{
Directory.CreateDirectory(newPath);
}
var fiName = Guid.NewGuid().ToString() + Path.GetExtension(reportfile.FileName);
using (var fileStream = new FileStream(Path.Combine(newPath,fiName),FileMode.Create))
{
reportfile.CopyTo(fileStream);
}
// Get uploaded file path with root
string rootFolder = _hostingEnvironment.WebRootPath;
string fileName = @"Files/" + fiName;
FileInfo file = new FileInfo(Path.Combine(rootFolder,fileName));
using (ExcelPackage package = new ExcelPackage(file))
{
ExcelWorksheet workSheet = package.Workbook.Worksheets[0];
int totalRows = workSheet.Dimension.Rows;
List<ScreeningList> reportList = new List<ScreeningList>();
for (int i = 2; i <= totalRows; i++)
{
try
{
string JambRegNo = workSheet?.Cells[i,1]?.Value?.ToString();
string Utmescore = workSheet?.Cells[i,2]?.Value?.ToString();
double ScreeningScore = Convert.ToDouble(workSheet?.Cells[i,3]?.Value?.ToString());
reportList.Add(new ScreeningList
{
JambRegNo = JambRegNo,Utmescore = Utmescore,ScreeningScore = ScreeningScore
});
//screening.Add();
}
catch (Exception Ex)
{
// Exception
}
}
_context.ScreeningList.UpdateRange(reportList);
_context.SaveChanges();
return RedirectToaction(nameof(ScreeningResult));
}
}
这是我在上传中使用的方法。但是它没有更新,而是添加了新记录,并且我无法将ScreeningStatus
的值设置为true。