У меня есть таблица с 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.