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.