Hi
I'm having problems with the grid losing the dynamic column metadata when using the batch edit "save changes" and cancel changes" buttons. See the attached pictures. The grid is declared in the ASPX page and the columns are assigned in the page_load event only on the first page load.
Here is the grid declaration:
<telerik:RadGrid ID="radGridGrades" runat="server" AllowPaging="false" Width="100%" enableEmbeddedSkins="false" Skin="CorpsNETBootstrap" AllowSorting="true" ClientSettings-Selecting-AllowRowSelect="true" AllowMultiRowSelection="true" ClientSettings-AllowKeyboardNavigation="true" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" AlternatingItemStyle-HorizontalAlign="Center" AllowMultiRowEdit="true" OnBatchEditCommand="radGridGrades_BatchEditCommand" OnNeedDataSource="radGridGrades_NeedDataSource" OnItemDataBound="radGridGrades_ItemDataBound"> <MasterTableView AutoGenerateColumns="False" DataKeyNames="ID" Width="100%" CommandItemDisplay="Top" CommandItemStyle-Height="15px" CommandItemSettings-ShowCancelChangesButton="true" CommandItemSettings-ShowAddNewRecordButton="false" PageSize="10" EnableNoRecordsTemplate="true" EditMode="Batch" InsertItemPageIndexAction="ShowItemOnCurrentPage"> <Columns> </Columns> <EditFormSettings> <PopUpSettings ScrollBars="None" /> </EditFormSettings> <NoRecordsTemplate> <div align="center" style="color:darkorange">---------- No Records to Display -----------</div> </NoRecordsTemplate> </MasterTableView> <ClientSettings> </ClientSettings></telerik:RadGrid>
And here is the code-behind for the page:
public partial class GradesByClass : CorpsNET.BasePage{ CorpsNETServer.ScheduledClass _scheduledClass; CorpsNETServer.Lookup _academicSchedule; CorpsNETServer.AcademicAssignment _academicAssignment; protected void Page_Load(object sender, EventArgs e) { base.Page_Load(sender, e); if (Request.QueryString["ScheduledClassID"] != null) { _scheduledClass = ScheduledClassService.GetByID(Int32.Parse(Request.QueryString["ScheduledClassID"])); } if (!Page.IsPostBack) { if (((UserProfile)Session["_userProfile"]).IsAuthorized("Grades - Edit") == true) { Master.SetLocation("GradesByClass.aspx", "Grade Entry for: <b>" + _scheduledClass.SubjectName + "</b>", true); } else { throw new CorpsNETServer.CorpsNETAuthException("Grades - Edit"); } //rdpRosterDate.SelectedDate = DateTime.Now; lblClassPeriod.Text = _scheduledClass.ClassPeriodName; lblClassroom.Text = _scheduledClass.ClassroomName; lblClassSchedule.Text = _scheduledClass.ClassroomScheduleName; lblSubject.Text = _scheduledClass.SubjectName; lblTeacher.Text = _scheduledClass.TeacherName; lblTrimester.Text = _scheduledClass.TrimesterName; LoadGridStructure(); } } public void LoadGridStructure() { radGridGrades.Columns.Add(new GridBoundColumn() { ReadOnly=true, UniqueName = "Corpsmember", DataField = "EmployeeName", HeaderText = "Corpsmember", SortExpression = "EmployeeName" }); radGridGrades.Columns.Add(new GridBoundColumn() { ReadOnly = true, UniqueName = "AcademicScheduleName", DataField = "AcademicScheduleName", HeaderText = "Academic Schedule", SortExpression = "AcademicScheduleName" }); radGridGrades.Columns.Add(new GridBoundColumn() { ReadOnly = true, UniqueName = "CurrentStatusName", DataField = "CurrentStatusName", HeaderText = "Current Status", SortExpression = "CurrentStatusName" }); List<AcademicAssignment> _academicAssignemnts = AcademicAssignmentService.GetForScheduledClass(_scheduledClass.ID); for (int i = 0; i < _academicAssignemnts.Count; i++) { radGridGrades.Columns.Add(new GridBoundColumn() { UniqueName = _academicAssignemnts[i].ID.ToString(), HeaderText = "Assignment: <a href='#' class='RadGrid_CorpsNETBootstrap_a' onclick =openEditAcademicAssignmentWindow(" + _academicAssignemnts[i].ID + "); return false;>" + _academicAssignemnts[i].Name + "</a> Due Date: <b>" + _academicAssignemnts[i].DueDateString + "</b>" }); } } public void LoadStudents() { radGridGrades.DataSource = EmployeeService.GetForScheduledClass(_scheduledClass.ID); } protected void radGridGrades_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item is GridDataItem) { GridEditableItem form = (GridEditableItem)e.Item; int employeeid = Int32.Parse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["ID"].ToString()); //goto through all the assignments and load any existing grades for that assignment List<AcademicAssignment> _academicAssignments = AcademicAssignmentService.GetForScheduledClass(_scheduledClass.ID); for (int i = 0; i < _academicAssignments.Count; i++) { //radGridGrades.Columns.Add(new GridBoundColumn() { UniqueName = _academicAssignemnts[i].ID.ToString(), HeaderText = "Assignment: <b>" + _academicAssignemnts[i].Name + "</b> Due Date: <b>" + _academicAssignemnts[i].DueDateString + "</b>" }); //get the grade for this assignment and Employee Grade _grade = GradeService.GetForAcademicAssignment(employeeid, _academicAssignments[i].ID); if (_grade != null) { if (_academicAssignments[i].LetterGrade == true) form[_academicAssignments[i].ID.ToString()].Text = _grade.LetterGrade; else form[_academicAssignments[i].ID.ToString()].Text = _grade.Points.ToString(); } else form[_academicAssignments[i].ID.ToString()].Text = string.Empty; } } } protected void radGridGrades_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { LoadStudents(); } protected void radGridGrades_BatchEditCommand(object sender, GridBatchEditingEventArgs e) { //todo }}
On the first page load everything works fine. (see pic 1) I want to edit only the values in a single column. I'm aware that I have not yet implemented the save code. the problem is that the first columns lose their definitions after postback by either the 'cancel changes' or 'save changes' batch edit buttons. CAn you point me in the right direction? Thanks.
