My understanding is that OnClientFilesUploaded will fire when all files in the list have been uploaded. However, if you queue up several files (drag and drop)... and then later (while the first set is still uploading) queue up a second set of files (drag and drop); the OnClientFilesUploaded event will trigger after the first set of files is finished uploading and not after all files have finished uploading.
I have a full postback happening in my OnClientFilesUploaded handler which causes any other queued up files to be removed from the list. Can the OnClientFilesUploaded be changed to only fire when all files in the list have been uploaded? And not after the first set is complete?
Tested on IE 11 and Chrome.


Greetings,
I wanted to use the saveTableChanges(tableViews) method for my RadGrids in BatchEdit mode. I have 3 different grids and I want to save their changes in one postback with my own Save button that is external to the grid. The saveBatchChanges function below is fired on save:
function saveBatchChanges() { var grid1 = $find("<%=RadGridApprovalsequence1.ClientID %>"); var grid2 = $find("<%=RadGridApprovalsequence2.ClientID %>"); var grid3 = $find("<%=RadGridApprovalsequence3.ClientID %>"); var tableView1 = grid1.get_masterTableView(); var tableView2 = grid2.get_masterTableView(); var tableView3 = grid3.get_masterTableView(); var tableViews = []; tableViews.push(tableView1); tableViews.push(tableView2); tableViews.push(tableView3); var batchManager1 = grid1.get_batchEditingManager(); var batchManager2 = grid2.get_batchEditingManager(); var batchManager3 = grid3.get_batchEditingManager(); var grid1Updated = batchManager1._extractChangesString(tableView1) === "" ? false : true; var grid2Updated = batchManager2._extractChangesString(tableView2) === "" ? false : true; var grid3Updated = batchManager3._extractChangesString(tableView3) === "" ? false : true;// changes in 1 grid (grid 1) if (grid1Updated == true && grid2Updated == false && grid3Updated == false) { batchManager1.saveTableChanges(tableViews); }// changes in 1 grid (grid 2)else if (grid2Updated == true && grid1Updated == false && grid3Updated == false) { batchManager2.saveTableChanges(tableViews); }// changes in 1 grid (grid 3)else if (grid3Updated == true && grid1Updated == false && grid2Updated == false) { batchManager3.saveTableChanges(tableViews); }// changes in 2 grids (grids 1 and 2)else if (grid1Updated == true && grid2Updated == true && grid3Updated == false) { batchManager1.saveTableChanges(tableViews); // THIS FAILS! }// changes in 2 grids (grids 1 and 3)else if (grid1Updated == true && grid2Updated == false && grid3Updated == true) { batchManager1.saveTableChanges(tableViews); }// changes in 2 grids (grids 2 and 3)else if (grid1Updated == false && grid2Updated == true && grid3Updated == true) { batchManager2.saveTableChanges(tableViews); }// changes in all 3 gridselse { batchManager1.saveTableChanges(tableViews);}};
For some reason, if only 1 grid is updated, the batchManager1.saveTableChanges(tableViews) method works, but not when more than 1 grid is updated. In IE I noticed a JavaScript error on the call to saveTableChanges ("Unable to get property 'cell' of undefined or null reference"). It does not do the postback for me and my handler on the server side (RadGridApprovalsequence1_BatchEditCommand) is never triggered. Below is the handler:
protected void RadGridApprovalsequence1_BatchEditCommand(object sender, GridBatchEditingEventArgs e){BatchEditCommand(sender, e);}protected void RadGridApprovalsequence2_BatchEditCommand(object sender, Telerik.Web.UI.GridBatchEditingEventArgs e){BatchEditCommand(sender, e);}protected void RadGridApprovalsequence3_BatchEditCommand(object sender,Telerik.Web.UI.GridBatchEditingEventArgs e){BatchEditCommand(sender, e);}protected void BatchEditCommand(object sender, GridBatchEditingEventArgs e){// Save logic here }
Here is the one of the grids (the other 2 are similar):
<telerik:RadGrid ID="RadGridApprovalsequence1" ToolTip="Grid 1 Approval Flow" GridLines="None" runat="server"
PageSize="12" AllowPaging="True" AutoGenerateColumns="False"
OnItemDataBound="RadGridApprovalsequence1_ItemDataBound"
OnItemCommand="RadGridApprovalsequence1_ItemCommand"
AllowAutomaticUpdates="False" AllowAutomaticInserts="False" OnBatchEditCommand="RadGridApprovalsequence1_BatchEditCommand" Width="450px">
<PagerStyle Mode="NextPrevAndNumeric" />
<MasterTableView Width="100%" CommandItemDisplay="TopAndBottom" CommandItemSettings-AddNewRecordText="Add New Step" DataKeyNames="TaskStageDisplayName,ApprovalStep,SubRole,DaysToApprove"
AutoGenerateColumns="False"
EditMode="Batch">
<BatchEditingSettings EditType="Cell" />
<CommandItemSettings ShowSaveChangesButton="false" ShowCancelChangesButton="false"/>
<Columns>
<telerik:GridTemplateColumn HeaderText="Task Stage" UniqueName="TaskStage" Visible="false">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "TaskStageDisplayName")%>
</ItemTemplate>
<HeaderStyle Font-Bold="True" Font-Names="Arial" Width="150px" />
<ItemStyle Font-Names="Arial" />
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Step" UniqueName="ApprovalStep">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "ApprovalStep")%>
</ItemTemplate>
<EditItemTemplate>
<telerik:RadNumericTextBox ToolTip="Approval Step" Type="Number" Value="1" runat="server" MaxLength="2" NumberFormat-DecimalDigits="0"
ID="txtApprovalSteps" Skin="Windows7" Width="30px">
</telerik:RadNumericTextBox>
<span style="color: Red">
<asp:CompareValidator ID="CompareValidator1" runat="server"
ControlToValidate="txtApprovalSteps"
ErrorMessage="*"
Operator="GreaterThanEqual" Type="Integer"
ValueToCompare="1"></asp:CompareValidator>
</span>
</EditItemTemplate>
<HeaderStyle Font-Bold="True" Font-Names="Arial" Width="60px"/>
<ItemStyle Font-Names="Arial"/>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Approver Role" UniqueName="SubRole">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "SubRole")%>
</ItemTemplate>
<EditItemTemplate>
<telerik:RadComboBox runat="server" ID="RadComboBoxSubRoles"
Width="190px" OnClientDropDownOpening="getGrid1SubRoles" MaxHeight="200px">
<ExpandAnimation Type="none" />
<CollapseAnimation Type="none" />
</telerik:RadComboBox>
<span style="color: Red">
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
ControlToValidate="RadComboBoxSubRoles" ErrorMessage="*Required" runat="server" Display="Dynamic">
</asp:RequiredFieldValidator>
</span>
</EditItemTemplate>
<HeaderStyle Font-Bold="True" Font-Names="Arial" Width="200px" />
<ItemStyle Font-Names="Arial" />
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Days to Approve" UniqueName="DaysToApprove" DataField="DaysToApprove" DataType="System.Int16">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "DaysToApprove")%>
</ItemTemplate>
<EditItemTemplate>
<telerik:RadNumericTextBox ToolTip="Days To Approve" Type="Number" Value="0" runat="server" MaxLength="2" NumberFormat-DecimalDigits="0"
ID="txtDaysToApprove" Skin="Windows7" Width="30px">
</telerik:RadNumericTextBox>
<span style="color: Red">
<asp:CompareValidator ID="CompareValidator2" runat="server"
ControlToValidate="txtDaysToApprove"
ErrorMessage=">= 0"
Operator="GreaterThanEqual" Type="Integer"
ValueToCompare="0"></asp:CompareValidator>
</span>
</EditItemTemplate>
<HeaderStyle Font-Bold="True" Font-Names="Arial" Width="80px" />
<ItemStyle Font-Names="Arial" />
</telerik:GridTemplateColumn>
<telerik:GridButtonColumn ConfirmText="Delete this Approval Step?" ConfirmDialogType="RadWindow"
ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" ImageUrl="~/_layouts/images/DeleteRed20.png"
UniqueName="DeleteColumn" >
<ItemStyle HorizontalAlign="Center" CssClass="MyImageButton"/>
<HeaderStyle Width="30px"/>
</telerik:GridButtonColumn>
</Columns>
</MasterTableView>
<FilterMenu EnableImageSprites="False"> </FilterMenu>
</telerik:RadGrid>
Question 1: Does it matter which manager I use to save changes happening in more than 1 grid?
Question 2: Is my implementation of the saveTableChanges(tableViews) method correct? If so, why is it not firing my handler while making changes in multiple grids vs. only 1 grid?
Thank you so much!
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always"> <Triggers> <asp:AsyncPostBackTrigger ControlID="RadGrid1" EventName="ItemCommand" /> <%--<asp:PostBackTrigger ControlID="RadGrid1" />--%> </Triggers> <ContentTemplate> <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnItemCommand="RadGrid1_ItemCommand" OnNeedDataSource="RadGrid1_NeedDataSource"> <MasterTableView Width="950" AutoGenerateColumns="false" DataKeyNames="EmpID" GridLines="None" TableLayout="Auto"> <Columns> <telerik:GridBoundColumn DataField="EmpID" HeaderText="Emp ID" ReadOnly="true" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" UniqueName="EmpID" FilterControlWidth="30px" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" /> <telerik:GridButtonColumn DataTextField="ButtonName" ItemStyle-ForeColor="Blue" CommandName="Generate" ConfirmTextFields="ButtonName" ConfirmTextFormatString="Would you like to {0} ACH file ?" ConfirmDialogType="RadWindow" Reorderable="false" UniqueName="ButtonName" ConfirmTitle="ACH File"> </telerik:GridButtonColumn> <telerik:GridBoundColumn DataField="EmployeeName" HeaderText="Employee Name" ReadOnly="true" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" UniqueName="EmployeeName" FilterControlWidth="60px" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" /> </Columns> </MasterTableView> </telerik:RadGrid> </ContentTemplate> </asp:UpdatePanel>protected void RadGrid1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) { if (e.CommandName == "Generate") { Response.ContentType = "text/plain"; Response.AppendHeader("Content-Disposition", "attachment;filename= errorLog.txt"); Response.AddHeader("content-length", "0"); Response.Flush(); Response.End(); } }AsyncPostBackTriggerI'm having an issue where, as far as I can tell, the ContentFilters aren't working. For my test content, I'm using:
<p onclick="alert('p-fired')">test text</p>
<script>
alert("fired");
</script>
My editor declaration looks like this:
<telerik:RadEditor runat="server" ID="reNewComment" ContentAreaMode="Div" StripFormattingOnPaste="MSWord,ConvertWordLists,Css"
Width="100%" ToolTip="New Comment" Height="300px" EnableResize="True" AllowScripts="False"
ContentFilters="StripDomEventAttributes,StripCssExpressions,RemoveScripts" EditModes="Design">
Now, my text is reaching the server as:
<p onclick="alert('p-fired')">test text</p>
<script>
alert("fired");
</script>
This is getting saved this way, and when the page is reloaded both events work. Am I declaring my content filters incorrectly? I figured they would strip out the script stuff client side, before reaching the server. Any help is appreciated, thanks.

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <telerik:RadScriptManager ID="radScriptManager" runat="server" /> <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript"> function conditionalPostback(sender, args) { alert('conditionalPostback'); var theRegexp = new RegExp("\.RadButtonInsert$", "ig"); if (args.get_eventTarget().match(theRegexp)) { var upload = $find(window['UploadId']); if (upload.getFileInputs()[0].value != "") { args.set_enableAjax(false); } } } </script> </telerik:RadCodeBlock> <telerik:RadAjaxManager ID="radAjaxManager" runat="server" ClientEvents-OnRequestStart="conditionalPostback"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="radGridAttachments"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="radGridAttachments" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="radButtonEdit"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="panelToolbar" /> <telerik:AjaxUpdatedControl ControlID="panelContent" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="radButtonSave"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="panelToolbar" /> <telerik:AjaxUpdatedControl ControlID="panelContent" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <asp:Panel runat="server"> <asp:Panel ID="panelToolbar" runat="server"> <telerik:RadButton ID="radButtonEdit" runat="server" Text="Edit" CausesValidation="false" OnClick="radButtonEdit_Click" /> <telerik:RadButton ID="radButtonSave" runat="server" Text="Save" CausesValidation="true" OnClick="radButtonSave_Click" /> </asp:Panel> <asp:Panel ID="panelContent" runat="server"> <telerik:RadPanelBar ID="radPanelBarAttachments" runat="server" Width="100%"> <Items> <telerik:RadPanelItem Text="Attachments" Expanded="true"> <ContentTemplate> <telerik:RadGrid ID="radGridAttachments" runat="server" AutoGenerateColumns="false" Enabled="false" OnNeedDataSource="radGridAttachments_NeedDataSource" OnItemDataBound="radGridAttachments_ItemDataBound" OnInsertCommand="radGridAttachments_InsertCommand" OnDeleteCommand="radGridAttachments_DeleteCommand" OnItemCommand="radGridAttachments_ItemCommand"> <MasterTableView CommandItemDisplay="Top" DataKeyNames="ID"> <CommandItemTemplate> <telerik:RadButton ID="radButtonAdd" runat="server" Text="Add New Record" CommandName="InitInsert" Visible='<%# !radGridAttachments.MasterTableView.IsItemInserted %>' ButtonType="LinkButton"> </telerik:RadButton> </CommandItemTemplate> <Columns> <telerik:GridBoundColumn DataField="ID" HeaderText="ID" ReadOnly="true" /> <telerik:GridBoundColumn UniqueName="FileName" DataField="FileName" HeaderText="File Name" ReadOnly="true" /> <telerik:GridTemplateColumn HeaderText="Attachment"> <ItemTemplate> <asp:LinkButton ID="ViewAttachmentLinkButton" runat="server" CommandName="ViewAttachment">View</asp:LinkButton> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridButtonColumn UniqueName="DeleteColumn" ButtonType="PushButton" Text="Delete" CommandName="Delete" /> </Columns> <EditFormSettings EditFormType="Template"> <FormTemplate> <telerik:RadUpload ID="RadUpload1" runat="server" InitialFileInputsCount="1" MaxFileInputsCount="1" ControlObjectsVisibility="None" /> <telerik:RadButton ID="RadButtonInsert" runat="server" Text='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>' CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>' /> <telerik:RadButton ID="RadButtonCancel" runat="server" Text="Cancel" CausesValidation="false" CommandName="Cancel" /> </FormTemplate> </EditFormSettings> </MasterTableView> </telerik:RadGrid> </ContentTemplate> </telerik:RadPanelItem> </Items> </telerik:RadPanelBar> </asp:Panel> </asp:Panel> </form></body></html>protected void radGridAttachments_ItemDataBound(object sender, GridItemEventArgs e){ if (e.Item is GridEditableItem && e.Item.IsInEditMode) { RadUpload radUpload = (RadUpload)e.Item.FindControl("RadUpload1"); radAjaxManager.ResponseScripts.Add(String.Format("window['UploadId'] = '{0}';", radUpload.ClientID)); }}


Hi Telerik team,
Currently I am having the parent - child data in the same table in the below format.
My Data...
Id | ParentId |score2 | 1 | 563 | 1 | 984 | 2 | 755 | 2 | 756 | 2 | 997 | 5 | 73Now I want to build the hierarchy grid using that single table. without defining separate detail table for each level
Note that the level is not limited. it can be extended to many level.
I want the grid to be like below
id | score>1 | 100 >2 | 56 >4 | 75 >5 | 75 >7 | 73 >6 | 99 >3 | 98Please help how to do this
Thanks
Alex
