0

I have a table Employees with a bunch of columns. I am looking for a way to edit one of these columns so it affects all rows.

The Column is called accrualmonth and it's used for a computed column in sql server.

.

Ideally I'd like to submit a form with a dropdownlist of numbers from 1 to 12.

I have created a CRUD operation so I can edit it for individual rows but ideally I need to do it in "bulk"

 public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Employee employee = db.Employees.Find(id);
        if (employee == null)
        {
            return HttpNotFound();
        }
        ViewBag.AreaID = new SelectList(db.Areas, "AreaID", "Area1", employee.AreaID);
        ViewBag.DisciplineID = new SelectList(db.Disciplines, "DisciplineID", "Discipline1", employee.DisciplineID);
        ViewBag.HeadQuatersID = new SelectList(db.HeadQuaters, "HeadQuatersID", "Name", employee.HeadQuatersID);
        ViewBag.ShiftID = new SelectList(db.Shifts, "ShiftID", "Shift1", employee.ShiftID);
        ViewBag.SiteID = new SelectList(db.Sites, "SiteID", "SiteName", employee.SiteID);
        return View(employee);
    }

    // POST: Accruals/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "EmployeeID,FullName,Email,StartDate,ShiftID,AreaID,DisciplineID,SiteID,ALCategory,HoursTaken,HoursCarriedForward,Comments,SickLeaveTaken,SickLeaveEntitlementRemaining,StudyLeaveEntitlement,StudyLeaveTaken,StudyLeaveRemaining,ExamLeaveTaken,ForceMajeure,BereavementLeaveTaken,MaternityLeaveTaken,ParentalLeaveTaken,AdoptionLeaveTaken,ManagerEmail,AreaManagerEmail,SickLeaveEntitlement,ActiveStatus,HeadQuatersID,Apprentice,AwardedLeave,TotalHoursThisYear,EntitlementRemainingThisYear,LeaveDate,LeavingDatEntitlement,accrualmonth,AllowanceToEndofMonth,TotalHolsToAccru")] Employee employee)
    {
        if (ModelState.IsValid)
        {
            db.Entry(employee).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.AreaID = new SelectList(db.Areas, "AreaID", "Area1", employee.AreaID);
        ViewBag.DisciplineID = new SelectList(db.Disciplines, "DisciplineID", "Discipline1", employee.DisciplineID);
        ViewBag.HeadQuatersID = new SelectList(db.HeadQuaters, "HeadQuatersID", "Name", employee.HeadQuatersID);
        ViewBag.ShiftID = new SelectList(db.Shifts, "ShiftID", "Shift1", employee.ShiftID);
        ViewBag.SiteID = new SelectList(db.Sites, "SiteID", "SiteName", employee.SiteID);
        return View(employee);
    }

How do I get started on this problem? Would I trying using foreach on the edit view so it can cycle through all the entries.

View:

     model HolidayTracker.Models.Employee


 <h2>Edit</h2>

@using (Html.BeginForm())
 {
   @Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Employee</h4>
    <hr />


   @Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.EmployeeID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.FullName)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Email)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.StartDate)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ShiftID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AreaID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.DisciplineID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.SiteID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ALCategory)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.HoursTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.HoursCarriedForward)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Comments)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.SickLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.SickLeaveEntitlementRemaining)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.StudyLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.StudyLeaveRemaining)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ExamLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ForceMajeure)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.BereavementLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.MaternityLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ParentalLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AdoptionLeaveTaken)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ManagerEmail)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AreaManagerEmail)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.SickLeaveEntitlement)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ActiveStatus)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.HeadQuatersID)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Apprentice)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AwardedLeave)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.TotalHoursThisYear)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.EntitlementRemainingThisYear)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.LeaveDate)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.LeavingDatEntitlement)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.AllowanceToEndofMonth)

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.TotalHolsToAccru)

    <div class="form-group">
        @Html.LabelFor(model => model.accrualmonth, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("accrualmonth", new[] { new SelectListItem() { Text = "1", Value = "1" },
                                                     new SelectListItem() { Text = "2", Value = "2" },
                                                     new SelectListItem() { Text = "3", Value = "3" },
                                                     new SelectListItem() { Text = "4", Value = "4" },
                                                     new SelectListItem() { Text = "5", Value = "5" },
                                                     new SelectListItem() { Text = "6", Value = "6" },
                                                     new SelectListItem() { Text = "7", Value = "7" },
                                                     new SelectListItem() { Text = "8", Value = "8" },
                                                     new SelectListItem() { Text = "9", Value = "9" },
                                                     new SelectListItem() { Text = "10", Value = "10" },
                                                     new SelectListItem() { Text = "11", Value = "11" },
                                                     new SelectListItem() { Text = "12", Value = "12" } }, 


                                                     htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.accrualmonth, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
</div>

}

As Requested:

enter image description here

Conor8630
  • 345
  • 1
  • 17
  • Can you take a screenshot for edit page for more detail? – Hien Nguyen Feb 19 '19 at 15:36
  • @HienNguyen Done!! I'm really just looking for a way to Fill all columns with a certain value nut im unsure how to acheive this! – Conor8630 Feb 19 '19 at 15:48
  • do you want to edit the grid-like multiple rows inside the table or grid, and you like to save or update them once? – Mian Almas Feb 19 '19 at 15:55
  • @MianAlmas I'd like to basically change every row at once to some value between 1 and 12. I'm using it in a calculation which depends on month so I need to change all entries to get required value! – Conor8630 Feb 19 '19 at 16:00
  • @Conor8630 do you need to change only one column value of all rows or multiple values? you need to install a nuget named beginCollection and see this post https://stackoverflow.com/questions/29774822/mvc-5-begincollectionitem-with-partial-crud?answertab=active#tab-top https://github.com/danludwig/BeginCollectionItem – Mian Almas Feb 19 '19 at 16:03
  • @MianAlmas Yes I need to change one column and all its values for every month. So for example if the accuralmonth column is changed to 6, all rows will have 6 for that column. – Conor8630 Feb 19 '19 at 16:06
  • no problem using above you can change anything inside the modal if you are using strongly typed modal creation for more samples let me know. https://github.com/danludwig/BeginCollectionItem – Mian Almas Feb 19 '19 at 16:08
  • @MianAlmas Just to be sure I can use it, could you check my view? I've added it to the question – Conor8630 Feb 19 '19 at 16:18

1 Answers1

0

Use the following in your view for strongly typed definition and yes make sure to replace all control to "For"

{ 
         List<SelectListItem> listOfMonths = new List<SelectListItem>();
        listOfMonths.Add(new SelectListItem() { Text = "1", Value = "1" });
        listOfMonths.Add(new SelectListItem() { Text = "2", Value = "2" });
        listOfMonths.Add(new SelectListItem() { Text = "3", Value = "3" });
        listOfMonths.Add(new SelectListItem() { Text = "4", Value = "4" });
        listOfMonths.Add(new SelectListItem() { Text = "5", Value = "5" });
        listOfMonths.Add(new SelectListItem() { Text = "6", Value = "6" });
        listOfMonths.Add(new SelectListItem() { Text = "7", Value = "7" });
        listOfMonths.Add(new SelectListItem() { Text = "8", Value = "8" });
        listOfMonths.Add(new SelectListItem() { Text = "9", Value = "9" });
        listOfMonths.Add(new SelectListItem() { Text = "10", Value = "10" });
        listOfMonths.Add(new SelectListItem() { Text = "11", Value = "11" });
        listOfMonths.Add(new SelectListItem() { Text = "12", Value = "12" });
    }
    @Html.DropDownListFor(model => model.accrualmonth, listOfMonths, htmlAttributes: new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.accrualmonth, "", new { @class = "text-danger" })

if you follow below you will get the desired result.

make a partialView with name of anything and add the code like this.

    @model HolidayTracker.Models.Employee
      List<SelectListItem> listOfMonths= (List<SelectListItem>)ViewData["listOfMonths"];

    @using (Html.BeginCollectionItem("employees"))
    {


     @Html.HiddenFor(model => model.EmployeeID)


@Html.HiddenFor(model => model.FullName)


@Html.HiddenFor(model => model.Email)


@Html.HiddenFor(model => model.StartDate)


@Html.HiddenFor(model => model.ShiftID)


@Html.HiddenFor(model => model.AreaID)


@Html.HiddenFor(model => model.DisciplineID)


@Html.HiddenFor(model => model.SiteID)


@Html.HiddenFor(model => model.ALCategory)


@Html.HiddenFor(model => model.HoursTaken)


@Html.HiddenFor(model => model.HoursCarriedForward)


@Html.HiddenFor(model => model.Comments)


@Html.HiddenFor(model => model.SickLeaveTaken)


@Html.HiddenFor(model => model.SickLeaveEntitlementRemaining)


@Html.HiddenFor(model => model.StudyLeaveTaken)


@Html.HiddenFor(model => model.StudyLeaveRemaining)


@Html.HiddenFor(model => model.ExamLeaveTaken)


@Html.HiddenFor(model => model.ForceMajeure)


@Html.HiddenFor(model => model.BereavementLeaveTaken)


@Html.HiddenFor(model => model.MaternityLeaveTaken)


@Html.HiddenFor(model => model.ParentalLeaveTaken)


@Html.HiddenFor(model => model.AdoptionLeaveTaken)


@Html.HiddenFor(model => model.ManagerEmail)


@Html.HiddenFor(model => model.AreaManagerEmail)


@Html.HiddenFor(model => model.SickLeaveEntitlement)


@Html.HiddenFor(model => model.ActiveStatus)


@Html.HiddenFor(model => model.HeadQuatersID)


@Html.HiddenFor(model => model.Apprentice)


@Html.HiddenFor(model => model.AwardedLeave)


@Html.HiddenFor(model => model.TotalHoursThisYear)


@Html.HiddenFor(model => model.EntitlementRemainingThisYear)


@Html.HiddenFor(model => model.LeaveDate)


@Html.HiddenFor(model => model.LeavingDatEntitlement)


@Html.HiddenFor(model => model.AllowanceToEndofMonth)


@Html.HiddenFor(model => model.TotalHolsToAccru)

<div class="form-group">
    @Html.LabelFor(model => model.accrualmonth, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.accrualmonth, listOfMonths, htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.accrualmonth, "", new { @class = "text-danger" })
    </div>
</div>
    }

then using this partial view in the previous page where you added this code if you are saying this is a grid you must have more than one rows

in main view

List<SelectListItem> listOfMonths = new List<SelectListItem>();
                    listOfMonths.Add(new SelectListItem() { Text = "1", Value = "1" });
                    listOfMonths.Add(new SelectListItem() { Text = "2", Value = "2" });
                    listOfMonths.Add(new SelectListItem() { Text = "3", Value = "3" });
                    listOfMonths.Add(new SelectListItem() { Text = "4", Value = "4" });
                    listOfMonths.Add(new SelectListItem() { Text = "5", Value = "5" });
                    listOfMonths.Add(new SelectListItem() { Text = "6", Value = "6" });
                    listOfMonths.Add(new SelectListItem() { Text = "7", Value = "7" });
                    listOfMonths.Add(new SelectListItem() { Text = "8", Value = "8" });
                    listOfMonths.Add(new SelectListItem() { Text = "9", Value = "9" });
                    listOfMonths.Add(new SelectListItem() { Text = "10", Value = "10" });
                    listOfMonths.Add(new SelectListItem() { Text = "11", Value = "11" });
                    listOfMonths.Add(new SelectListItem() { Text = "12", Value = "12" });

foreach (var module in Model?.Related)
                                            {

@{Html.RenderPartial("_YourPartialViewName", module, new ViewDataDictionary() { { "ListOfMonths", listOfMonths } });}

                                            }

and the controller will receive like this.

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(   List<Employee > employees)

no need to include the bind if the preopery name are same you will get it throgh this

Mian Almas
  • 174
  • 3
  • 11