This is a migrated thread and some comments may be shown as answers.

Losing Grid column metadata when batch editing rad grid that is statically declared with dynamically defined columns

2 Answers 119 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Jonathan
Top achievements
Rank 1
Jonathan asked on 09 Feb 2017, 10:22 PM

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.

2 Answers, 1 is accepted

Sort by
0
Peter Milchev
Telerik team
answered on 13 Feb 2017, 09:55 AM
Hello Jonathan,

I am sharing the solution from the support thread with the community, so that it could help people with similar issue.

The problem is that when the columns are programmatically added, they should be added to the column collection first and then to assign the column properties as described in this article: Adding Columns Programmatically.

Attached is a sample project based on the provided code snippets.

Regards,
Peter Milchev
Telerik by Progress
Try our brand new, jQuery-free Angular 2 components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
0
Jonathan
Top achievements
Rank 1
answered on 13 Feb 2017, 09:26 PM
Thanks Peter
Tags
Grid
Asked by
Jonathan
Top achievements
Rank 1
Answers by
Peter Milchev
Telerik team
Jonathan
Top achievements
Rank 1
Share this question
or