Thank you for your response. I just tested again and it seems that the example from the link you mentioned does in fact save the data from both grids. However, the first grid does not refresh with the updates so it looks like the data wasn't saved. If I refresh the page (by navigating to the same page in the browser address bar), then the grid shows the new data...
I've included the relevant markup/code below. Any suggestions why the first grid is not displaying the new data?
(Note that this code is being used in a user control in a SharePoint 2013 web part.)
<
telerik:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function saveAllChanges() {
var grid1 = $find("<%= gridGoals.ClientID %>");
var masterTable1 = grid1.get_masterTableView();
var grid2 = $find("<%= gridMentions.ClientID %>");
var masterTable2 = grid2.get_masterTableView();
var batchEditManager = grid2.get_batchEditingManager();
var tables = [];
tables.push(masterTable1);
tables.push(masterTable2);
batchEditManager.saveTableChanges(tables);
}
</
script
>
</
telerik:RadCodeBlock
>
<
div
class
=
"LayoutSubHeader"
>
<
asp:Panel
ID
=
"pnlButtons1"
runat
=
"server"
Visible
=
"false"
CssClass
=
"ButtonContainer"
>
<
div
style
=
"color: #666666; padding: 5px;"
>
<
asp:Label
ID
=
"lblLastSavedTime1"
runat
=
"server"
Font-Bold
=
"true"
visible
=
"false"
/>
</
div
>
<
div
>
<
asp:Button
ID
=
"btnSave1"
runat
=
"server"
Text
=
"Save All"
OnClientClick
=
"saveAllChanges(); return false;"
/>
<
asp:Button
ID
=
"btnClear1"
runat
=
"server"
Text
=
"Clear Changes"
OnClick
=
"btnClear_Click"
/>
</
div
>
</
asp:Panel
>
</
div
>
<
div
class
=
"LayoutBodyLeft"
>
<
asp:Panel
ID
=
"pnlEmployeeNotes"
runat
=
"server"
CssClass
=
"SectionContainer"
>
<
div
class
=
"SectionHeader"
>
Employee Notes
</
div
>
<
div
class
=
"QuestionContainer"
>
What accomplishments are you proud of?
</
div
>
<
div
class
=
"AnswerContainer"
>
<
div
class
=
"EditorContainer"
>
<
telerik:RadEditor
ID
=
"editorAccomplishments"
runat
=
"server"
Height
=
"250px"
Width
=
"100%"
ToolsFile
=
"/_controltemplates/15/PerformanceManager.WebParts/EmployeeAppraisal/EditorTools.xml"
NewLineMode
=
"Div"
EnableResize
=
"false"
Skin
=
"Silk"
>
<
CssFiles
>
<
telerik:EditorCssFile
Value
=
"/_controltemplates/15/PerformanceManager.WebParts/EmployeeAppraisal/Editor.css"
/>
</
CssFiles
>
</
telerik:RadEditor
>
</
div
>
</
div
>
<
div
class
=
"QuestionContainer"
>
What do you want to learn or improve in the next period?
</
div
>
<
div
class
=
"AnswerContainer"
>
<
div
class
=
"EditorContainer"
>
<
telerik:RadEditor
ID
=
"editorImprovements"
runat
=
"server"
Height
=
"250px"
Width
=
"100%"
ToolsFile
=
"/_controltemplates/15/PerformanceManager.WebParts/EmployeeAppraisal/EditorTools.xml"
NewLineMode
=
"Div"
EnableResize
=
"false"
Skin
=
"Silk"
>
<
CssFiles
>
<
telerik:EditorCssFile
Value
=
"/_controltemplates/15/PerformanceManager.WebParts/EmployeeAppraisal/Editor.css"
/>
</
CssFiles
>
</
telerik:RadEditor
>
</
div
>
</
div
>
<
div
class
=
"QuestionContainer"
>
Goals
</
div
>
<
div
class
=
"AnswerContainer"
>
<
telerik:RadGrid
ID
=
"gridGoals"
runat
=
"server"
AllowSorting
=
"true"
AutoGenerateColumns
=
"false"
EnableHeaderContextMenu
=
"true"
OnNeedDataSource
=
"gridGoals_NeedDataSource"
OnBatchEditCommand
=
"gridGoals_BatchEditCommand"
OnPreRender
=
"gridGoals_PreRender"
GridLines
=
"None"
HeaderStyle-BorderStyle
=
"Solid"
HeaderStyle-BorderWidth
=
"1px"
HeaderStyle-BorderColor
=
"White"
PageSize
=
"25"
Width
=
"100%"
Skin
=
"Silk"
>
<
MasterTableView
Name
=
"Master"
AllowMultiColumnSorting
=
"true"
ShowHeadersWhenNoRecords
=
"true"
EnableNoRecordsTemplate
=
"true"
CommandItemDisplay
=
"Bottom"
EditMode
=
"Batch"
DataKeyNames
=
"ID"
>
<
BatchEditingSettings
OpenEditingEvent
=
"Click"
EditType
=
"Cell"
/>
<
CommandItemSettings
ShowSaveChangesButton
=
"false"
ShowCancelChangesButton
=
"false"
ShowRefreshButton
=
"false"
AddNewRecordText
=
"Add new goal"
/>
<
Columns
>
<
telerik:GridBoundColumn
HeaderText
=
"Description"
DataField
=
"JGoalDescription"
UniqueName
=
"JGoalDescription"
></
telerik:GridBoundColumn
>
<
telerik:GridDateTimeColumn
HeaderText
=
"Date Established"
HeaderStyle-Width
=
"200px"
DataField
=
"JGoalDateEstablished"
UniqueName
=
"JGoalDateEstablished"
DataType
=
"System.DateTime"
DataFormatString
=
"{0:yyyy-MM-dd}"
></
telerik:GridDateTimeColumn
>
<
telerik:GridDateTimeColumn
HeaderText
=
"Estimated Completion Date"
HeaderStyle-Width
=
"200px"
DataField
=
"JGoalDateCompleted"
UniqueName
=
"JGoalDateCompleted"
DataType
=
"System.DateTime"
DataFormatString
=
"{0:yyyy-MM-dd}"
></
telerik:GridDateTimeColumn
>
<
telerik:GridButtonColumn
ConfirmText
=
"Delete this goal?"
ConfirmDialogType
=
"RadWindow"
ConfirmTitle
=
"Delete"
HeaderText
=
"Delete"
HeaderStyle-Width
=
"50px"
ButtonType
=
"ImageButton"
CommandName
=
"Delete"
Text
=
"Delete"
UniqueName
=
"DeleteColumn"
></
telerik:GridButtonColumn
>
</
Columns
>
<
NoRecordsTemplate
>
<
div
>
There are no goals to display for this period.
</
div
>
</
NoRecordsTemplate
>
</
MasterTableView
>
<
ClientSettings
EnableRowHoverStyle
=
"true"
Resizing-AllowColumnResize
=
"true"
Resizing-EnableRealTimeResize
=
"true"
Resizing-AllowResizeToFit
=
"true"
Resizing-ClipCellContentOnResize
=
"false"
>
</
ClientSettings
>
</
telerik:RadGrid
>
</
div
>
</
asp:Panel
>
<
asp:Panel
ID
=
"pnlSupervisorNotes"
runat
=
"server"
Visible
=
"false"
CssClass
=
"SectionContainer"
BackColor
=
"#FFDA3F"
>
<
div
class
=
"SectionHeader"
>
Supervisor Notes
</
div
>
<
div
class
=
"QuestionContainer"
>
Continue to
</
div
>
<
div
class
=
"AnswerContainer"
>
<
div
class
=
"EditorContainer"
>
<
telerik:RadEditor
ID
=
"editorContinueTo"
runat
=
"server"
Height
=
"250px"
Width
=
"100%"
ToolsFile
=
"/_controltemplates/15/PerformanceManager.WebParts/EmployeeAppraisal/EditorTools.xml"
NewLineMode
=
"Div"
EnableResize
=
"false"
Skin
=
"Silk"
>
<
CssFiles
>
<
telerik:EditorCssFile
Value
=
"/_controltemplates/15/PerformanceManager.WebParts/EmployeeAppraisal/Editor.css"
/>
</
CssFiles
>
</
telerik:RadEditor
>
</
div
>
</
div
>
</
asp:Panel
>
</
div
>
<
div
class
=
"LayoutBodyRight"
>
<
div
class
=
"SectionContainer"
>
<
div
class
=
"SectionHeader"
>
Mentions ...
</
div
>
<
div
class
=
"AnswerContainer"
>
<
telerik:RadGrid
ID
=
"gridMentions"
runat
=
"server"
AllowSorting
=
"true"
AutoGenerateColumns
=
"false"
EnableHeaderContextMenu
=
"true"
OnNeedDataSource
=
"gridMentions_NeedDataSource"
OnBatchEditCommand
=
"gridMentions_BatchEditCommand"
OnPreRender
=
"gridMentions_PreRender"
GridLines
=
"None"
HeaderStyle-BorderStyle
=
"Solid"
HeaderStyle-BorderWidth
=
"1px"
HeaderStyle-BorderColor
=
"White"
PageSize
=
"25"
Width
=
"100%"
Skin
=
"Silk"
>
<
MasterTableView
Name
=
"Master"
AllowMultiColumnSorting
=
"true"
ShowHeadersWhenNoRecords
=
"true"
EnableNoRecordsTemplate
=
"true"
CommandItemDisplay
=
"Bottom"
EditMode
=
"Batch"
DataKeyNames
=
"ID"
>
<
BatchEditingSettings
OpenEditingEvent
=
"Click"
EditType
=
"Cell"
/>
<
CommandItemSettings
ShowSaveChangesButton
=
"false"
ShowCancelChangesButton
=
"false"
ShowRefreshButton
=
"false"
AddNewRecordText
=
"Add new mention"
/>
<
Columns
>
<
telerik:GridTemplateColumn
HeaderText
=
"Who?"
DataField
=
"JMentioned"
UniqueName
=
"JMentioned"
>
<
ItemTemplate
>
<%# Eval("JMentioned") %>
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadComboBox
runat
=
"server"
ID
=
"cbMentioned"
EmptyMessage
=
"Choose an Employee"
MarkFirstMatch
=
"true"
Filter
=
"StartsWith"
>
</
telerik:RadComboBox
>
</
EditItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Why?"
DataField
=
"JMentionedReason"
></
telerik:GridBoundColumn
>
<
telerik:GridButtonColumn
ConfirmText
=
"Delete this mention?"
ConfirmDialogType
=
"RadWindow"
ConfirmTitle
=
"Delete"
HeaderText
=
"Delete"
HeaderStyle-Width
=
"50px"
ButtonType
=
"ImageButton"
CommandName
=
"Delete"
Text
=
"Delete"
UniqueName
=
"DeleteColumn"
></
telerik:GridButtonColumn
>
</
Columns
>
<
NoRecordsTemplate
>
<
div
>
There are no mentions to display for this period.
</
div
>
</
NoRecordsTemplate
>
</
MasterTableView
>
<
ClientSettings
EnableRowHoverStyle
=
"true"
Resizing-AllowColumnResize
=
"true"
Resizing-EnableRealTimeResize
=
"true"
Resizing-AllowResizeToFit
=
"true"
Resizing-ClipCellContentOnResize
=
"false"
>
</
ClientSettings
>
</
telerik:RadGrid
>
</
div
>
</
div
>
</
div
>
<
asp:HiddenField
ID
=
"hiddenSaveChanges"
runat
=
"server"
Value
=
"false"
/>
protected
void
Page_PreRender(
object
sender, EventArgs e)
{
if
(hiddenSaveChanges.Value ==
"true"
)
{
try
{
SaveEmployeeNotes();
// Save data from other controls here...
SaveSupervisorNotes();
// Save data from other controls here...
string
lastSaved =
string
.Format(
"Last saved: {0}"
, DateTime.Now.ToString(
"yyyy-MM-dd hh:mm tt"
));
lblLastSavedTime1.Text = lastSaved;
lblLastSavedTime1.Visible =
true
;
}
catch
(Exception ex)
{
hiddenSaveChanges.Value =
"false"
;
// log error
}
}
hiddenSaveChanges.Value =
"false"
;
}
protected
void
gridGoals_NeedDataSource(
object
sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
//Load data here ...
}
protected
void
gridGoals_PreRender(
object
sender, EventArgs e)
{
RadDatePicker pickerEstablished = GetGoalDatePickerControl(
"JGoalDateEstablished"
);
pickerEstablished.DateInput.DateFormat =
"yyyy-MM-dd"
;
pickerEstablished.DateInput.DisplayDateFormat =
"yyyy-MM-dd"
;
RadDatePicker pickerCompleted = GetGoalDatePickerControl(
"JGoalDateCompleted"
);
pickerCompleted.DateInput.DateFormat =
"yyyy-MM-dd"
;
pickerCompleted.DateInput.DisplayDateFormat =
"yyyy-MM-dd"
;
}
protected
void
gridGoals_BatchEditCommand(
object
sender, GridBatchEditingEventArgs e)
{
hiddenSaveChanges.Value =
"true"
;
//Handle the grid updates
foreach
(GridBatchEditingCommand command
in
e.Commands)
{
try
{
Hashtable newValues = command.NewValues;
if
(command.Type == GridBatchEditingCommandType.Insert)
{
// Add new record here...
}
else
if
(command.Type == GridBatchEditingCommandType.Update)
{
// Update record here ...
}
else
if
(command.Type == GridBatchEditingCommandType.Delete)
{
// delete record here ..
}
}
catch
(Exception ex)
{
// log error
}
}
}
protected
void
gridMentions_NeedDataSource(
object
sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
//Load data here ...
}
protected
void
gridMentions_PreRender(
object
sender, EventArgs e)
{
// Load data for RadComboBox in EditItemTemplate here ...
}
protected
void
gridMentions_BatchEditCommand(
object
sender, GridBatchEditingEventArgs e)
{
hiddenSaveChanges.Value =
"true"
;
//Handle the grid updates
foreach
(GridBatchEditingCommand command
in
e.Commands)
{
try
{
Hashtable newValues = command.NewValues;
if
(command.Type == GridBatchEditingCommandType.Insert)
{
// Add new record here...
}
else
if
(command.Type == GridBatchEditingCommandType.Update)
{
// Update record here ...
}
else
if
(command.Type == GridBatchEditingCommandType.Delete)
{
// delete record here ..
}
}
catch
(Exception ex)
{
// log error
}
}
}