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

RadGrid batch edit mode multiple grids incorrect command type

9 Answers 19 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Kathleen Johnson
Top achievements
Rank 1
Kathleen Johnson asked on 21 Jul 2017, 09:08 PM

Hello, I have two grids on the same page in batch edit mode. When I submit a page via javascript code the second grid has command type of "Update" instead of "Insert". Please help!

<div class="grid__col grid__col--1-of-2">
                <p>Prescriptions</p>
                <telerik:RadGrid ID="gridPrescriptions" runat="server" AutoGenerateColumns="false"
                    AllowAutomaticInserts="true" AllowAutomaticUpdates="true" AllowSorting="True" AllowPaging="True"
                    OnNeedDataSource="gridPrescriptions_NeedDataSource" Width="100%" DataKeyNames="EscalationCaseRxId"
                    OnBatchEditCommand="gridPrescriptions_BatchEditCommand">
                    <MasterTableView CommandItemDisplay="Top" EditMode="Batch">
                        <BatchEditingSettings EditType="Row" />
                        <CommandItemSettings ShowSaveChangesButton="false" ShowRefreshButton="false" ShowCancelChangesButton="false" />
                        <Columns>
                            <telerik:GridBoundColumn DataField="RxNumber" HeaderText="Prescription Number *" UniqueName="RxNumber" MaxLength="50" HeaderStyle-Width="300">
                                <ColumnValidationSettings EnableRequiredFieldValidation="true">
                                    <RequiredFieldValidator ForeColor="Red" Text="*This field is required" runat="server">
                                    </RequiredFieldValidator>
                                </ColumnValidationSettings>
                            </telerik:GridBoundColumn>
                            <telerik:GridDateTimeColumn DataField="DateOfService" HeaderText="Date of Service *" UniqueName="DateOfService" HeaderStyle-Width="400" DataFormatString="{0:MM/dd/yyyy}">
                                <ColumnValidationSettings EnableRequiredFieldValidation="true">
                                    <RequiredFieldValidator ForeColor="Red" Text="*This field is required" runat="server">
                                    </RequiredFieldValidator>
                                </ColumnValidationSettings>
                            </telerik:GridDateTimeColumn>
                        </Columns>
                    </MasterTableView>
                </telerik:RadGrid>
            </div>
 
            <div class="grid__col grid__col--1-of-2">
                <p>Benefit Verification</p>
                <telerik:RadGrid ID="gridBenefitVerification" runat="server" AutoGenerateColumns="false"
                    AllowAutomaticInserts="true" AllowAutomaticUpdates="true" AllowSorting="false" AllowPaging="True"
                    OnNeedDataSource="gridBenefitVerification_NeedDataSource" Width="100%" DataKeyNames="EscalationCaseBvId" OnBatchEditCommand="gridBenefitVerification_BatchEditCommand">
                    <MasterTableView CommandItemDisplay="Top" EditMode="Batch">
                        <BatchEditingSettings EditType="Row" />
                        <CommandItemSettings ShowSaveChangesButton="false" ShowRefreshButton="false" ShowCancelChangesButton="false" />
                        <Columns>
                            <telerik:GridDateTimeColumn DataField="DateVerified" HeaderText="Date Benefit Verified*" UniqueName="DateVerified" HeaderStyle-Width="400" DataFormatString="{0:MM/dd/yyyy}">
                                <ColumnValidationSettings EnableRequiredFieldValidation="true">
                                    <RequiredFieldValidator ForeColor="Red" Text="*This field is required" runat="server">
                                    </RequiredFieldValidator>
                                </ColumnValidationSettings>
                            </telerik:GridDateTimeColumn>
                        </Columns>
                    </MasterTableView>
                </telerik:RadGrid>
            </div>
 
function saveChanges() {
                if (Page_IsValid) {
                    <%--var grid = $find("<%= gridPrescriptions.ClientID %>");
                    if (grid.get_masterTableView().get_dataItems().length > 0) {
                        grid.get_batchEditingManager().saveChanges(grid.get_masterTableView());
                    }
                    else {
                        var label = document.getElementById("<%= lblMessage.ClientID%>");
                        label.innerText = "Please add at least one prescription.";
                        label.style.color = "red";
                        label.style.display = "";
                        document.body.scrollTop = document.documentElement.scrollTop = 0;
                    }--%>
 
                    var gridRx = $find("<%= gridPrescriptions.ClientID %>");
                    var masterTableRx = gridRx.get_masterTableView();
 
                    if (masterTableRx.get_dataItems().length > 0) {
 
                        var gridBv = $find("<%= gridBenefitVerification.ClientID %>");
                        var masterTableBv = gridBv.get_masterTableView();
                        var batchEditManager = gridBv.get_batchEditingManager();
                        var tables = [];
 
                        //var changes1 = batchEditManager._changes;
                        //var changes2 = gridRx.get_batchEditingManager()._changes;
 
                        tables.push(masterTableRx);
                        tables.push(masterTableBv);
 
                        batchEditManager.saveTableChanges(tables);
                    }
                    else
                    {
                        var label = document.getElementById("<%= lblMessage.ClientID%>");
                        label.innerText = "Please add at least one prescription.";
                        label.style.color = "red";
                        label.style.display = "";
                        document.body.scrollTop = document.documentElement.scrollTop = 0;
                    }
                }
            }

 

 

9 Answers, 1 is accepted

Sort by
0
Steve
Top achievements
Rank 1
answered on 10 Mar 2021, 11:59 PM

Hi,

Did you find a fix/workaround to resolve your issue? We're having the same issue. When insert, the command.Type shows "insert" on IE/Firefox, but it shows "update" on Chrome. See below code.

 

 Protected Sub dgPersonSrv_BatchEditCommand(sender As Object, e As Telerik.Web.UI.GridBatchEditingEventArgs) Handles dgPersonSrv.BatchEditCommand

 

        For Each command As GridBatchEditingCommand In e.Commands
            Dim ddlEmpName As RadComboBox = dgPersonSrv.FindControl(dgPersonSrv.MasterTableView.ClientID + "_EMPID").FindControl("ddlEmpName")
            Dim ddlPosition As RadComboBox = dgPersonSrv.FindControl(dgPersonSrv.MasterTableView.ClientID + "_POSITIONID").FindControl("ddlPosition")
            Dim newValues As Hashtable = command.NewValues
            Dim oldValues As Hashtable = command.OldValues
            Dim dt = TryCast(Session("dtPersonSrv"), DataTable)
            dt.Columns("EXPENDITURE").AllowDBNull = True
            dt.Columns("EXPENDITURETODATE").AllowDBNull = True
            Dim decValue As Decimal, decExp As Decimal, decExpToDate As Decimal
            Dim i As Integer

 

            Select Case command.Type
                Case GridBatchEditingCommandType.Insert
                    Dim newRow As DataRow = dt.NewRow()
                    newRow.Item("ID") = dt.Rows.Count + 1
                    newRow.Item("EMPID") = If(newValues("EMPID") Is Nothing, "", newValues("EMPID"))
                    newRow.Item("EmployeeName") = ddlEmpName.Text
                    newRow.Item("POSITIONID") = If(newValues("POSITIONID") Is Nothing, "", newValues("POSITIONID"))
                    newRow.Item("PositionTitle") = ddlPosition.Text
                    If Not newValues("SALARY") Is Nothing AndAlso Decimal.TryParse(newValues("SALARY").ToString(), decValue) Then
                        newRow.Item("SALARY") = decValue
                    Else
                        newRow.Item("SALARY") = 0
                    End If
                    If Not newValues("BENEFITS") Is Nothing AndAlso Decimal.TryParse(newValues("BENEFITS").ToString(), decValue) Then
                        newRow.Item("BENEFITS") = decValue
                    Else
                        newRow.Item("BENEFITS") = DBNull.Value
                    End If
                    newRow.Item("EXPENDITURE") = 0
                    newRow.Item("EXPENDITURETODATE") = 0
                    newRow.Item("APPROVED") = If(newValues("APPROVED") Is Nothing, DBNull.Value, newValues("APPROVED"))

 

                    If newRow.Item("EMPID").ToString.Trim <> "" Or newRow.Item("POSITIONID").ToString.Trim <> "" Or newRow.Item("SALARY").ToString.Trim <> "" Or
                        newRow.Item("BENEFITS").ToString.Trim <> "" Or newRow.Item("APPROVED").ToString.Trim <> "" Then
                        dt.Rows.InsertAt(newRow, 0)
                    End If
                Case GridBatchEditingCommandType.Delete
                    For Each row As DataRow In dt.Select("ID='" + oldValues("ID").ToString() + "'")
                        row.Delete()
                    Next
                    dt.AcceptChanges()
                    'Reset RowID
                    i = 1
                    dt.DefaultView.Sort = "ID ASC"
                    dt = dt.DefaultView.ToTable()
                    dt.Columns("ID").ReadOnly = False
                    For Each row As DataRow In dt.Rows
                        row.Item("ID") = i
                        i += 1
                    Next
                    dt.AcceptChanges()
                Case GridBatchEditingCommandType.Update
                    If oldValues IsNot Nothing And newValues IsNot Nothing Then
                        If oldValues.Count > 0 And newValues.Count > 0 Then
                            Dim curRow = dt.Select("ID='" + oldValues("ID").ToString() + "'").ToList()
                            If curRow.Count() > 0 Then
                                decExp = curRow(0).Item("EXPENDITURE")
                                decExpToDate = curRow(0).Item("EXPENDITURETODATE")
                            End If

 

                            For Each row As DataRow In dt.Select("ID='" + oldValues("ID").ToString() + "'")
                                row.Delete()
                            Next
                            For Each row As DataRow In dt.Select("ID='" + newValues("ID").ToString() + "'")
                                row.Delete()
                            Next
                            dt.AcceptChanges()

 

                            Dim newRow As DataRow = dt.NewRow()
                            newRow.Item("ID") = oldValues("ID")
                            newRow.Item("EMPID") = If(newValues("EMPID") Is Nothing, "", newValues("EMPID"))
                            newRow.Item("EmployeeName") = ddlEmpName.Text
                            newRow.Item("POSITIONID") = If(newValues("POSITIONID") Is Nothing, "", newValues("POSITIONID"))
                            newRow.Item("PositionTitle") = ddlPosition.Text
                            If Not newValues("SALARY") Is Nothing AndAlso Decimal.TryParse(newValues("SALARY").ToString(), decValue) Then
                                newRow.Item("SALARY") = decValue
                            Else
                                newRow.Item("SALARY") = DBNull.Value
                            End If
                            If Not newValues("BENEFITS") Is Nothing AndAlso Decimal.TryParse(newValues("BENEFITS").ToString(), decValue) Then
                                newRow.Item("BENEFITS") = decValue
                            Else
                                newRow.Item("BENEFITS") = DBNull.Value
                            End If
                            newRow.Item("EXPENDITURE") = decExp
                            newRow.Item("EXPENDITURETODATE") = decExpToDate
                            newRow.Item("APPROVED") = If(newValues("APPROVED") Is Nothing, DBNull.Value, newValues("APPROVED"))
                            dt.Rows.InsertAt(newRow, 0)
                        End If
                    End If
            End Select

 

            Session("dtPersonSrv") = dt
            dgPersonSrv.DataSource = dt
            dgPersonSrv.Rebind()
            dgPersonSrv.Focus()
        Next
    End Sub

 
0
Attila Antal
Telerik team
answered on 15 Mar 2021, 03:50 PM

Hi Steve,

I also answered the support ticket you opened for the same issue but I will share my answer with the Forum community as well:


I have tested this behavior with a basic Grid configuration and it seems that the Command Types are correct in all browsers.

Please test the attached sample and see if that works on your end.

To be able to help identify the problem of your app, I would need a sample that replicates the issue. For that purpose, you can modify my sample that will behave in the way you explained, and send it back to me. I will then troubleshoot the issue locally.

I look forward to hearing from you.

 

Regards,
Attila Antal
Progress Telerik

Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.

0
Steve
Top achievements
Rank 1
answered on 15 Mar 2021, 04:23 PM

Hi,

I worked for me too. We use similar code in our application, but it does not work on some of the web pages. We found that if we trigger  undefined method in the grid that will change the command.type from "update" to "insert" to work. It is very strange, but it works on Chrome. 

 
0
Attila Antal
Telerik team
answered on 16 Mar 2021, 01:06 PM

Hi Steve,

I can check the problem if you edit my sample to replicate the issue.

Then I could tell exactly what causes it.

Regards,
Attila Antal
Progress Telerik

Virtual Classroom, the free self-paced technical training that gets you up to speed with Telerik and Kendo UI products quickly just got a fresh new look + new and improved content including a brand new Blazor course! Check it out at https://learn.telerik.com/.

0
Steve
Top achievements
Rank 1
answered on 16 Mar 2021, 05:02 PM

Hi,

Is that possible we can have a conf call and sharing the screen so we can show you what happened ? Thanks

 
0
Steve
Top achievements
Rank 1
answered on 16 Mar 2021, 06:27 PM

Hi,

One more question, do we need to purchase Telerik report server in order to use the Telerik Reporting  ? 

Thanks,

Steve

 
0
Attila Antal
Telerik team
answered on 17 Mar 2021, 11:29 AM

Hi Steve,

I suggest that we discuss the problems in your Formal Support ticket and we will share the answer in the Forum thread once the issue is resolved.

Regards,
Attila Antal
Progress Telerik

Virtual Classroom, the free self-paced technical training that gets you up to speed with Telerik and Kendo UI products quickly just got a fresh new look + new and improved content including a brand new Blazor course! Check it out at https://learn.telerik.com/.

0
Steve
Top achievements
Rank 1
answered on 17 Mar 2021, 06:56 PM

Hi,

I include our source codes. The trick is to add line 15 (see attached screenshot) to change the command.type from update to insert in Chrome when inserting a new row in the aspx webpage. Hope this info give you some hint. Thanks

 

        function BatchEditCellValueChanged(sender, args) {
            // add chrome check

            SaveGrid(sender, args);
            throw 'Telerik grid insert/update';
        }

 

 

=== ASPX code ===

<asp:Content ID="Content1" ContentPlaceHolderID="Main" runat="Server">
    <link href="CSS/Styles.css" type="text/css" rel="stylesheet" />

    <script type="text/javascript">
        function SaveGrid(sender, args) {
            var tableView = args.get_tableView();
            var batchEditingManager = sender.get_batchEditingManager();
            batchEditingManager.saveChanges(tableView);
        }

        function BatchEditCellValueChanged(sender, args) {
            // add chrome check

            SaveGrid(sender, args);
            throw 'Telerik grid insert/update';
        }

        function addLineTest(sender, args) {
            var grid = $find('<%=dgPersonExp.ClientID%>');
            var tableView = grid.get_masterTableView();
            var batchManager = grid.get_batchEditingManager();
            batchManager.addNewRecord(tableView);

            //Default one line in the grid
            //var newItem = tableView.get_dataItems()[0];
            //var descCell = newItem.get_cell("SALARY");
            //batchManager.changeCellValue(descCell, "0");
        }
    </script>

<asp:Panel ID="panPage3" runat="server">
    <table class="FONT1" id="Table9" style="width: 912px" cellspacing="1" cellpadding="1" width="912" border="0">
        <tr>
            <td bgcolor="#d3d3d3">
                <table cellpadding="0" cellspacing="0">
                    <tr>
                        <td style="width: 770px;">
                            <asp:Label ID="Label40" runat="server" Font-Bold="True" ForeColor="Black">Personnel Expenditures</asp:Label>
                        </td>
                        <td>
                            <asp:Button ID="btnExcelPersonnel" runat="server" Font-Bold="True" ForeColor="BLUE"
                                Font-Size="8pt" Text="Export to Excel" BorderStyle="None" Font-Underline="True"  Visible="false"
                                BackColor="#d3d3d3" Width="132px"></asp:Button>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td valign="top">
                <table width="1100px" cellpadding="0" cellspacing="0">
                    <tr>
                        <td>
                            <telerik:RadGrid ID="dgPersonExp" runat="server" Width="1100px" AllowPaging="false" AutoGenerateColumns="false" ShowStatusBar="true"
                                AllowSorting="false" EnableLinqExpressions="false" GridLines="Both" ShowFooter="true" AllowAutomaticInserts="true"
                                AllowAutomaticDeletes="true">
                                <ClientSettings>
                                    <Scrolling AllowScroll="false" UseStaticHeaders="true" />
                                    <Selecting AllowRowSelect="true" />
                                    <ClientEvents OnRowDeleted="function(sender, args){SaveGrid(sender, args);}" OnBatchEditCellValueChanged="function(sender, args){BatchEditCellValueChanged(sender, args);}" />
                                </ClientSettings>
                                <MasterTableView TableLayout="Fixed" Width="100%" Height="100%" ShowHeadersWhenNoRecords="true" EditMode="Batch" InsertItemDisplay="Bottom"
                                    CommandItemDisplay="Bottom"
                                    DataKeyNames="ID,EMPID,POSITIONID,DATEPAYENDED,HR,DATEPAID,CHKNO,SALARY,FICA,MEDICARE,SF,WC,OTHER,BENEFITS,EXPENDITURE,APPROVED"><%--,TotalHoursWorked,DentalInsurance,VisionInsurance,Retirement"> --%>
                                    <BatchEditingSettings EditType="Row" SaveAllHierarchyLevels="true" OpenEditingEvent="Click" />
                                    <CommandItemSettings AddNewRecordText="Add New Line Item" ShowSaveChangesButton="false" ShowCancelChangesButton="false" />
                                    <SortExpressions>
                                        <telerik:GridSortExpression FieldName="ID" SortOrder="Ascending" />
                                    </SortExpressions>
                                    <Columns>
                                        <telerik:GridBoundColumn HeaderText="ID" UniqueName="ID" DataField="ID" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="0%" Visible="false" />
                                        <telerik:GridTemplateColumn HeaderText="Employee Name" UniqueName="EMPID" DataField="EMPID" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="8%" HeaderStyle-Font-Size="Smaller" FooterText="Total Amount" FooterStyle-HorizontalAlign="Left" FooterStyle-Font-Size="Smaller" ItemStyle-Font-Size="Smaller">
                                            <ItemTemplate>
                                                <asp:Label ID="lblEmpName" runat="server" Text='<%# Bind("EmployeeName")%>'></asp:Label>
                                            </ItemTemplate>
                                            <EditItemTemplate>
                                                <telerik:RadComboBox ID="ddlEmpName" runat="server" DataTextField="DESCR" DataValueField="ID" Width="100%" DropDownAutoWidth="Enabled"></telerik:RadComboBox>
                                            </EditItemTemplate>
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Position" UniqueName="POSITIONID" DataField="POSITIONID" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="8%" HeaderStyle-Font-Size="Smaller" ItemStyle-Font-Size="Smaller">
                                            <ItemTemplate>
                                                <asp:Label ID="lblPosition" runat="server" Text='<%# Bind("PositionTitle")%>'></asp:Label>
                                            </ItemTemplate>
                                            <EditItemTemplate>
                                                <telerik:RadComboBox ID="ddlPosition" runat="server" DataTextField="DESCR" DataValueField="ID" Width="100%" DropDownAutoWidth="Enabled"></telerik:RadComboBox>
                                            </EditItemTemplate>
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Pay Period <br> Ended" UniqueName="DATEPAYENDED" DataField="DATEPAYENDED" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="8%" HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblDatePayEnded" Text='<%# Eval("DATEPAYENDED", "{0:MM/dd/yyyy}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <asp:TextBox ID="txtDatePayEnded" runat="server" MaxLength="10" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Hours <br> Charged" UniqueName="HR" DataField="HR" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" >
                                             <ItemTemplate> 
                                                <asp:Label ID="lblHR" Text='<%# Eval("HR", "{0:f2}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtHR" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <%--<telerik:GridTemplateColumn HeaderText="Total Hours <br> Worked" UniqueName="TotalHoursWorked" DataField="TotalHoursWorked" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" >
                                             <ItemTemplate> 
                                                <asp:Label ID="lblTotalHoursWorked" Text='<%# Eval("TotalHoursWorked") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtTotalHoursWorked" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>--%>
                                        <telerik:GridTemplateColumn HeaderText="Date Paid" UniqueName="DATEPAID" DataField="DATEPAID" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="8%" HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" >
                                            <ItemTemplate> 
                                                <asp:Label ID="lblDatePaid" Text='<%# Eval("DATEPAID", "{0:MM/dd/yyyy}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <asp:TextBox ID="txtDatePaid" runat="server" MaxLength="10" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridBoundColumn HeaderText="Check <br> No." UniqueName="CHKNO" DataField="CHKNO" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="6%" HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller"/>
                                        <telerik:GridTemplateColumn HeaderText="Salary <br> Paid" UniqueName="SALARY" DataField="SALARY" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="6%"
                                            HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" Aggregate="Sum" FooterAggregateFormatString="{0:C}"
                                            FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblSalary" Text='<%# Eval("SALARY", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtSalary" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="FICA" UniqueName="FICA" DataField="FICA" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller"
                                            ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" Aggregate="Sum" FooterAggregateFormatString="{0:C}" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblFICA" Text='<%# Eval("FICA", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtFICA" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Medicare" UniqueName="MEDICARE" DataField="MEDICARE" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller"
                                            ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" Aggregate="Sum" FooterAggregateFormatString="{0:C}" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblMedicare" Text='<%# Eval("MEDICARE", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtMedicare" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="SUI<BR>&<BR>FUTA" UniqueName="SF" DataField="SF" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="5%" HeaderStyle-Font-Size="Smaller"
                                            ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" Aggregate="Sum" FooterAggregateFormatString="{0:C}" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblSF" Text='<%# Eval("SF", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtSF" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Workers Comp." UniqueName="WC" DataField="WC" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller"
                                            ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" Aggregate="Sum" FooterAggregateFormatString="{0:C}" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblWC" Text='<%# Eval("WC", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtWC" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <%--<telerik:GridTemplateColumn HeaderText="Dental Ins." UniqueName="DentalInsurance" DataField="DentalInsurance" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblDentalInsurance" Text='<%# Eval("DentalInsurance", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtDentalInsurance" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Vision Ins." UniqueName="VisionInsurance" DataField="VisionInsurance" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblVisionInsurance" Text='<%# Eval("VisionInsurance", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtVisionInsurance" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Retirement" UniqueName="Retirement" DataField="Retirement" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="5%" HeaderStyle-Font-Size="Smaller" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblRetirement" Text='<%# Eval("Retirement", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtRetirement" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>--%>
                                        <telerik:GridTemplateColumn HeaderText="Pension<BR>Health<BR>Other" UniqueName="OTHER" DataField="OTHER" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller"
                                            ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" Aggregate="Sum" FooterAggregateFormatString="{0:C}" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblOther" Text='<%# Eval("OTHER", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtOther" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Benefit <BR> Total" UniqueName="BENEFITS" DataField="BENEFITS" ReadOnly="true" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="5%" HeaderStyle-Font-Size="Smaller"
                                            ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" Aggregate="Sum" FooterAggregateFormatString="{0:C}" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblBenefit" Text='<%# Eval("BENEFITS", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtBenefit" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="This Period Total" UniqueName="EXPENDITURE" DataField="EXPENDITURE" ReadOnly="true" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller"
                                            ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" Aggregate="Sum" FooterAggregateFormatString="{0:C}" FooterStyle-HorizontalAlign="Right" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblExpenditure" Text='<%# Eval("EXPENDITURE", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtExpenditure" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridTemplateColumn HeaderText="Approved <BR> This <BR> Period" UniqueName="APPROVED" DataField="APPROVED" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="4%" HeaderStyle-Font-Size="Smaller"
                                            Aggregate="Sum" FooterAggregateFormatString="{0:C}" FooterStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right" ItemStyle-Font-Size="Smaller" FooterStyle-Font-Size="Smaller">
                                            <ItemTemplate> 
                                                <asp:Label ID="lblApproved" Text='<%# Eval("APPROVED", "{0:C}") %>' runat="server" />
                                            </ItemTemplate> 
                                            <EditItemTemplate> 
                                                <telerik:RadNumericTextBox ID="txtApproved" runat="server" />
                                            </EditItemTemplate> 
                                        </telerik:GridTemplateColumn>
                                        <telerik:GridButtonColumn UniqueName="DeleteButton" ButtonType="ImageButton" HeaderStyle-Width="5%" CommandName="Delete" ImageUrl="CDBGSkin\Grid\del_up.gif" ItemStyle-HorizontalAlign="Center" />
                                    </Columns>
                                </MasterTableView>
                            </telerik:RadGrid>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td>
                <table style="width:732px;" cellpadding="0" cellspacing="0">
                    <tr hidden="hidden">
                        <td align="left">
                            <telerik:RadButton runat="server" ID="btnNewPersonExp" AutoPostBack="false" Text="Add New Line Item" OnClientClicked="function(sender, args){addLine(sender, args, 'ctl00_Main_dgPersonExp');}"></telerik:RadButton>                    
                            <%--<telerik:RadButton runat="server" ID="RadButton1" AutoPostBack="false" Text="Add New Line Item" OnClientClicked="function(sender, args){addLine(sender, args, 'ctl00_Main_dgPersonExp');}"></telerik:RadButton>--%>                    
                            
                        </td>
                        <td align="right">
                            <telerik:RadButton runat="server" ID="btnRefPersonExp" AutoPostBack="false" Text="Refresh"></telerik:RadButton>
                        </td>
                    </tr>
                </table>                    
            </td>
        </tr>
        <asp:Panel ID="panPersonnelUpload" runat="server" Visible="false">
            <tr>
                <td nowrap="nowrap">
                    <asp:Label ID="Label11" runat="server" Width="299px" Font-Bold="True">Excel Personnel Expenditure Document:</asp:Label><input
                        class="FONT1" id="inpImgFilePersonnel" title="inpImgFile" style="width: 306px;
                        height: 19px" type="file" size="43" name="inpImgFile" runat="server" />
                    <asp:Button ID="btnUploadFilePersonnel" runat="server" Width="90px" Height="20" CssClass="FONT1"
                        Text="Upload File"></asp:Button>
                </td>
            </tr>
            <tr>
                <td>
                </td>
            </tr>
        </asp:Panel>
        <tr>
            <td style="width: 732px;">
                <table cellpadding="0" cellspacing="0">
                    <tr>
                        <td style="width: 732px; background-color:#d3d3d3">
                            <asp:Label ID="Label41" runat="server" Font-Bold="True" ForeColor="Black">Non-Personnel Expenditures</asp:Label>
                        </td>
                        <td>
                            <asp:Button ID="btnExcelNonPersonnel" runat="server" Font-Bold="True" ForeColor="BLUE" Font-Size="8pt"
                                Text="Export to Excel" BorderStyle="None" Font-Underline="True" BackColor="#d3d3d3" Visible="false"
                                Width="132px"></asp:Button>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
</asp:Panel>

 

=== VB code ===

#Region "Page 3"
    Public Sub LoadPage3()
        If mfdrq.AgencyID = 0 Then
            If Not Session("FDRQOBJECT") Is Nothing Then
                mfdrq = Session("FDRQOBJECT")
            Else
                LoadHeader()
            End If
        End If

        panPage1Header.Visible = False
        panPage2Header.Visible = False
        panPage3Header.Visible = True
        panPage4Header.Visible = False

        panRequestHeader.Visible = True
        panNav.Visible = True

        txtformid.Value = 3

        panPage1.Visible = False
        panPage2.Visible = False
        panPage3.Visible = True
        panPage4.Visible = False

        btnPage1.Enabled = True
        btnPage2.Enabled = True
        btnPage3.Enabled = False
        btnPage4.Enabled = True

        btnCancel.Visible = True
        btnDelete.Visible = True
        btnSave.Visible = True
        btnSaveApproved.Visible = True

        Try
            Dim blnPreparer As Boolean = False
            Dim lngPartnerID As Long = 0

            If GetFDRQPageLoad(CInt(txtformpkid.Value), txtformid.Value, Deleted, Session("usr_userid"), Session("usr_agencyid"), dr, strErrorDesc) Then
                Dim dtPersonExp = New DataTable()
                dtPersonExp.Load(dr)
                Session("dtPersonExp") = dtPersonExp
                dgPersonExp.DataSource = dtPersonExp
                dgPersonExp.DataBind()

                'dr.NextResult()
                Dim dtNonPersonExp = New DataTable()
                dtNonPersonExp.Load(dr)
                Session("dtNonPersonExp") = dtNonPersonExp
                dgNonPersonExp.DataSource = dtNonPersonExp
                dgNonPersonExp.DataBind()

                'dr.NextResult()
                Dim dtCapOutExp = New DataTable()
                dtCapOutExp.Load(dr)
                Session("dtCapOutExp") = dtCapOutExp
                dgCapOutExp.DataSource = dtCapOutExp
                dgCapOutExp.DataBind()

                Dim lngResults As Long = 0
                'dr.NextResult()
                If (dr.HasRows = True) Then
                    lngResults = 1
                End If
                Dim dtProjAdminCostSupp = New DataTable()
                dtProjAdminCostSupp.Load(dr)
                Session("dtProjAdminCostSupp") = dtProjAdminCostSupp
                dgProjAdminCostSupp.DataSource = dtProjAdminCostSupp
                dgProjAdminCostSupp.DataBind()
                If lngResults = 1 Then
                    Dim lngCount As Long = 0
                    Dim decPercentage As Decimal = 0
                    Dim decAmount As Decimal = 0

                    Dim adjPercentage As Decimal = 0
                    Dim adjCosts As Decimal = 0

                    For Each lRow As GridDataItem In dgProjAdminCostSupp.Items
                        If (lngCount = 0) Then
                            '  decPercentage = lRow.Cells(4).Text
                            decPercentage = If(String.IsNullOrEmpty(lRow.GetDataKeyValue("APPROVED").ToString()), 0, lRow.GetDataKeyValue("APPROVED"))
                            adjPercentage = If(String.IsNullOrEmpty(lRow.GetDataKeyValue("ADJUSTMENT").ToString()), 0, lRow.GetDataKeyValue("ADJUSTMENT"))
                        ElseIf (lngCount = 1) Then
                            decAmount = If(String.IsNullOrEmpty(lRow.GetDataKeyValue("APPROVED").ToString()), 0, lRow.GetDataKeyValue("APPROVED"))
                            adjCosts = If(String.IsNullOrEmpty(lRow.GetDataKeyValue("ADJUSTMENT").ToString()), 0, lRow.GetDataKeyValue("ADJUSTMENT"))
                        End If

                        lngCount += 1
                    Next

                    'Below formats the footers
                    'dgProjAdminCostSupp.MasterTableView.Columns(4).FooterText = FormatCurrency((decPercentage / 100) * decAmount) 'Original
                    Dim footer As GridFooterItem = TryCast(dgProjAdminCostSupp.MasterTableView.GetItems(GridItemType.Footer)(0), GridFooterItem)

                    'Approved Total
                    Dim totalAdjustments As Label = TryCast(footer.FindControl("totalAdjustments"), Label)
                    totalAdjustments.Text = FormatCurrency((decPercentage / 100) * decAmount)

                    'Adjustments Total
                    Dim totalApproved As Label = TryCast(footer.FindControl("totalApproved"), Label)
                    totalApproved.Text = FormatCurrency((adjPercentage / 100) * adjCosts)


                    'Below formats the rows
                    'Format both rows for percentage
                    'Dim firstRow As GridItem = dgProjAdminCostSupp.MasterTableView.GetItems(GridItemType.Item)(0)
                    Dim firstRow As GridItem = dgProjAdminCostSupp.MasterTableView.Items(0)
                    'Dim secondRow As GridItem = dgProjAdminCostSupp.MasterTableView.GetItems(GridItemType.Item)(1)
                    Dim secondRow As GridItem = dgProjAdminCostSupp.MasterTableView.Items(1)


                    'First row perecntage items
                    Dim expPercentItem As Label = TryCast(firstRow.FindControl("lblProjAdmSuppExpenditure"), Label)
                    expPercentItem.Text = FormatPercent(CInt(expPercentItem.Text) / 100)

                    Dim adjPercentItem As Label = TryCast(firstRow.FindControl("lblAdjustments"), Label)
                    adjPercentItem.Text = FormatPercent(CInt(adjPercentItem.Text) / 100)

                    'Second row cost items
                    Dim expCostItem As Label = TryCast(secondRow.FindControl("lblProjAdmSuppExpenditure"), Label)
                    expCostItem.Text = FormatCurrency(expCostItem.Text)

                    Dim adjCostItem As Label = TryCast(secondRow.FindControl("lblAdjustments"), Label)
                    adjCostItem.Text = FormatCurrency(adjCostItem.Text)
                End If
                'dr.NextResult()

                Do While dr.Read
                    If (dr("ROLEID") = 6) Then
                        blnPreparer = True
                    End If
                Loop
                'dr.NextResult()

                Do While dr.Read
                    lngPartnerID = dr("PARTNERID")
                Loop
                dr.Close()
            Else
                If Not dr.IsClosed Then
                    dr.Close()
                End If

                Session("error") = strErrorDesc
                Session("page") = Request.FilePath()
                Server.ClearError()
                Response.Redirect(Session("errorpage").ToString)
            End If

            btnSave.Enabled = False
            btnDelete.Enabled = False
            btnNewCapExp.Enabled = False
            dgCapOutExp.MasterTableView.GetColumn("DeleteButton").Visible = False
            btnNewNonPerExp.Enabled = False
            dgNonPersonExp.MasterTableView.GetColumn("DeleteButton").Visible = False
            btnNewPersonExp.Enabled = False
            dgPersonExp.MasterTableView.GetColumn("DeleteButton").Visible = False
            'dgPersonExp.Bands(0).AllowUpdate = AllowUpdate.No
            'dgNonPersonExp.Bands(0).AllowUpdate = AllowUpdate.No
            'dgCapOutExp.Bands(0).AllowUpdate = AllowUpdate.No
            'dgProjAdminCostSupp.Bands(0).AllowUpdate = AllowUpdate.No

            'NO activity reported
            If mfdrq.NoActChk Then
                Exit Sub
            End If

            If (blnPreparer = True) Then
                Select Case mfdrq.NextActionByID
                    Case NextActionByID.ToBeSubmitted, NextActionByID.Approval, NextActionByID.Denied
                        btnSave.Enabled = True
                        btnDelete.Enabled = True
                        btnNewCapExp.Enabled = True
                        dgCapOutExp.MasterTableView.GetColumn("DeleteButton").Visible = True
                        btnNewNonPerExp.Enabled = True
                        dgNonPersonExp.MasterTableView.GetColumn("DeleteButton").Visible = True
                        btnNewPersonExp.Enabled = True
                        dgPersonExp.MasterTableView.GetColumn("DeleteButton").Visible = True
                        'dgPersonExp.Bands(0).AllowUpdate = AllowUpdate.Yes
                        'dgNonPersonExp.Bands(0).AllowUpdate = AllowUpdate.Yes
                        'dgCapOutExp.Bands(0).AllowUpdate = AllowUpdate.Yes
                        'dgProjAdminCostSupp.Bands(0).AllowUpdate = AllowUpdate.Yes
                        For Each col As GridColumn In dgPersonExp.MasterTableView.Columns
                            If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = True
                        Next
                        For Each col As GridColumn In dgNonPersonExp.MasterTableView.Columns
                            If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = True
                        Next
                        For Each col As GridColumn In dgCapOutExp.MasterTableView.Columns
                            If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = True
                        Next
                End Select
            End If

            If (mfdrq.NextActionByID >= 10) Then
                dgPersonExp.MasterTableView.GetColumn("APPROVED").Visible = True
                dgNonPersonExp.MasterTableView.GetColumn("APPROVED").Visible = True
                dgCapOutExp.MasterTableView.GetColumn("APPROVED").Visible = True
                dgProjAdminCostSupp.MasterTableView.GetColumn("APPROVED").Visible = True
            Else
                dgPersonExp.MasterTableView.GetColumn("APPROVED").Visible = False
                dgNonPersonExp.MasterTableView.GetColumn("APPROVED").Visible = False
                dgCapOutExp.MasterTableView.GetColumn("APPROVED").Visible = False
                'dgProjAdminCostSupp.MasterTableView.GetColumn("APPROVED").Visible = False
            End If

            If (mfdrq.NextActionByID = 10 Or mfdrq.NextActionByID = 11) Then
                If (lngPartnerID <> 0) Then
                    For Each col As GridColumn In dgPersonExp.MasterTableView.Columns
                        If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = False
                    Next
                    For Each col As GridColumn In dgNonPersonExp.MasterTableView.Columns
                        If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = False
                    Next
                    For Each col As GridColumn In dgCapOutExp.MasterTableView.Columns
                        If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = False
                    Next
                    For Each col As GridColumn In dgProjAdminCostSupp.MasterTableView.Columns
                        If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = False
                    Next
                    btnSaveApproved.Enabled = True
                End If
            Else
                For Each col As GridColumn In dgPersonExp.MasterTableView.Columns
                    If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = True
                Next
                For Each col As GridColumn In dgNonPersonExp.MasterTableView.Columns
                    If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = True
                Next
                For Each col As GridColumn In dgCapOutExp.MasterTableView.Columns
                    If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = True
                Next
                For Each col As GridColumn In dgProjAdminCostSupp.MasterTableView.Columns
                    If col.UniqueName = "APPROVED" Then CType(col, GridTemplateColumn).ReadOnly = True
                Next
                btnSaveApproved.Enabled = False
            End If

            Dim blnShowSave As Boolean = False
            Select Case mfdrq.NextActionByID
                Case NextActionByID.ToBeSubmitted, NextActionByID.Denied
                    panSaveApproved.Visible = False
                    panSave.Visible = True

                    If (blnPreparer = True) Then
                        blnShowSave = True
                    End If
                Case Else
                    panSaveApproved.Visible = True
                    panSave.Visible = False
                    btnSave.Enabled = False
            End Select
            If (blnShowSave = True) Then
                btnSave.Enabled = True
            Else
                btnSave.Enabled = False
            End If

            If (mfdrq.NextActionByID = 21) Then
                btnSave.Enabled = False
                btnSaveApproved.Enabled = False
            End If

            If btnSaveApproved.Enabled = True Then   'NavBarPerPage3.Enabled = True Or 
                Dim lngPage2Data As Long = 0
                dr = GetFDRQPage2ByID(CInt(txtformpkid.Value))
                Do While dr.Read
                    lngPage2Data = dr("THECOUNT")
                Loop
                dr.Close()

                Dim lngPage3Data As Long = 0
                dr = GetFDRQPage3ByID(CInt(txtformpkid.Value))
                Do While dr.Read
                    lngPage3Data = dr("THECOUNT")
                Loop
                dr.Close()

                If lngPage2Data > 0 And lngPage3Data = 0 Then
                    DisablePage3()
                End If
            End If

            'tcheng_20180711 Added - If the category does not exist in the budget, disable that grid (Except Participating Cities)
            If mfdrq.ATC <> 2 Then
                Dim dt As DataTable = GetFundingProjectBudgets(mfdrq.ProjectID)
                If (From r In dt.AsEnumerable Where r.Field(Of String)("CostCat") = "Personnel" Select r).Count() = 0 Then
                    btnNewPersonExp.Enabled = False
                    dgPersonExp.Enabled = False
                End If
                If (From r In dt.AsEnumerable Where r.Field(Of String)("CostCat") = "Non-Personnel" Select r).Count() = 0 Then
                    btnNewNonPerExp.Enabled = False
                    dgNonPersonExp.Enabled = False
                End If
                If (From r In dt.AsEnumerable Where r.Field(Of String)("CostCat") = "Capital Outlays" Select r).Count() = 0 Then
                    btnNewCapExp.Enabled = False
                    dgCapOutExp.Enabled = False
                End If
                If (From r In dt.AsEnumerable Where r.Field(Of String)("CostCat") = "Indirect Costs" Select r).Count() = 0 Then dgProjAdminCostSupp.Enabled = False
            End If

        Catch ex As Exception
            If Not dr.IsClosed Then
                dr.Close()
            End If

            Session("error") = strErrorDesc
            Session("page") = Request.FilePath()
            Server.ClearError()
            Response.Redirect(Session("errorpage").ToString)
        End Try
    End Sub

#Region "dgPersonExp"
    Private Sub dgPersonExp_NeedDataSource(sender As Object, e As GridNeedDataSourceEventArgs) Handles dgPersonExp.NeedDataSource
        dgPersonExp.DataSource = Session("dtPersonExp")
    End Sub
    Private Sub dgPersonExp_PreRender(sender As Object, e As EventArgs) Handles dgPersonExp.PreRender
        Dim ddlEmpName As RadComboBox = dgPersonExp.FindControl(dgPersonExp.MasterTableView.ClientID + "_EMPID").FindControl("ddlEmpName")
        ddlEmpName.DataSource = GetFDRQFundingEmployee(txtformpkid.Value)
        ddlEmpName.DataBind()

        Dim ddlPosition As RadComboBox = dgPersonExp.FindControl(dgPersonExp.MasterTableView.ClientID + "_POSITIONID").FindControl("ddlPosition")
        ddlPosition.DataSource = GetFDRQFundingPosition(txtformpkid.Value)
        ddlPosition.DataBind()
    End Sub
    Protected Sub dgPersonExp_BatchEditCommand(sender As Object, e As Telerik.Web.UI.GridBatchEditingEventArgs) Handles dgPersonExp.BatchEditCommand

        For Each command As GridBatchEditingCommand In e.Commands
            Dim ddlEmpName As RadComboBox = dgPersonExp.FindControl(dgPersonExp.MasterTableView.ClientID + "_EMPID").FindControl("ddlEmpName")
            Dim ddlPosition As RadComboBox = dgPersonExp.FindControl(dgPersonExp.MasterTableView.ClientID + "_POSITIONID").FindControl("ddlPosition")
            Dim newValues As Hashtable = command.NewValues
            Dim oldValues As Hashtable = command.OldValues
            Dim dt = TryCast(Session("dtPersonExp"), DataTable)
            dt.Columns("EXPENDITURE").AllowDBNull = True
            dt.Columns("APPROVED").AllowDBNull = True
            Dim decValue As Decimal, dateValue As Date
            Dim i As Integer

            Select Case command.Type
                Case GridBatchEditingCommandType.Insert
                    Dim newRow As DataRow = dt.NewRow()
                    newRow.Item("ID") = dt.Rows.Count + 1
                    newRow.Item("EMPID") = If(newValues("EMPID") Is Nothing, "", newValues("EMPID"))
                    newRow.Item("EmployeeName") = ddlEmpName.Text
                    newRow.Item("POSITIONID") = If(newValues("POSITIONID") Is Nothing, "", newValues("POSITIONID"))
                    newRow.Item("PositionTitle") = ddlPosition.Text
                    If Not newValues("DATEPAYENDED") Is Nothing AndAlso Date.TryParse(newValues("DATEPAYENDED").ToString(), dateValue) Then
                        newRow.Item("DATEPAYENDED") = dateValue.ToShortDateString
                    Else
                        newRow.Item("DATEPAYENDED") = DBNull.Value
                    End If
                    If Not newValues("HR") Is Nothing AndAlso Decimal.TryParse(newValues("HR").ToString(), decValue) Then
                        newRow.Item("HR") = decValue
                    Else
                        newRow.Item("HR") = 0
                    End If
                    'If Not newValues("TotalHoursWorked") Is Nothing AndAlso Decimal.TryParse(newValues("TotalHoursWorked").ToString(), decValue) Then
                    '    newRow.Item("TotalHoursWorked") = decValue
                    'Else
                    '    newRow.Item("TotalHoursWorked") = 0
                    'End If
                    If Not newValues("DATEPAID") Is Nothing AndAlso Date.TryParse(newValues("DATEPAID").ToString(), dateValue) Then
                        newRow.Item("DATEPAID") = dateValue.ToShortDateString
                    Else
                        newRow.Item("DATEPAID") = DBNull.Value
                    End If
                    newRow.Item("CHKNO") = If(newValues("CHKNO") Is Nothing, "", newValues("CHKNO"))
                    If Not newValues("SALARY") Is Nothing AndAlso Decimal.TryParse(newValues("SALARY").ToString(), decValue) Then
                        newRow.Item("SALARY") = decValue
                    Else
                        newRow.Item("SALARY") = 0
                    End If
                    If Not newValues("FICA") Is Nothing AndAlso Decimal.TryParse(newValues("FICA").ToString(), decValue) Then
                        newRow.Item("FICA") = decValue
                    Else
                        newRow.Item("FICA") = 0
                    End If
                    If Not newValues("MEDICARE") Is Nothing AndAlso Decimal.TryParse(newValues("MEDICARE").ToString(), decValue) Then
                        newRow.Item("MEDICARE") = decValue
                    Else
                        newRow.Item("MEDICARE") = 0
                    End If
                    'If Not newValues("DentalInsurance") Is Nothing AndAlso Decimal.TryParse(newValues("DentalInsurance").ToString(), decValue) Then
                    '    newRow.Item("DentalInsurance") = decValue
                    'Else
                    '    newRow.Item("DentalInsurance") = 0
                    'End If
                    'If Not newValues("VisionInsurance") Is Nothing AndAlso Decimal.TryParse(newValues("VisionInsurance").ToString(), decValue) Then
                    '    newRow.Item("VisionInsurance") = decValue
                    'Else
                    '    newRow.Item("VisionInsurance") = 0
                    'End If
                    'If Not newValues("Retirement") Is Nothing AndAlso Decimal.TryParse(newValues("Retirement").ToString(), decValue) Then
                    '    newRow.Item("Retirement") = decValue
                    'Else
                    '    newRow.Item("Retirement") = 0
                    'End If
                    If Not newValues("SF") Is Nothing AndAlso Decimal.TryParse(newValues("SF").ToString(), decValue) Then
                        newRow.Item("SF") = decValue
                    Else
                        newRow.Item("SF") = 0
                    End If
                    If Not newValues("WC") Is Nothing AndAlso Decimal.TryParse(newValues("WC").ToString(), decValue) Then
                        newRow.Item("WC") = decValue
                    Else
                        newRow.Item("WC") = 0
                    End If
                    If Not newValues("OTHER") Is Nothing AndAlso Decimal.TryParse(newValues("OTHER").ToString(), decValue) Then
                        newRow.Item("OTHER") = decValue
                    Else
                        newRow.Item("OTHER") = 0
                    End If
                    If Not newValues("BENEFITS") Is Nothing AndAlso Decimal.TryParse(newValues("BENEFITS").ToString(), decValue) Then
                        newRow.Item("BENEFITS") = decValue
                    Else
                        newRow.Item("BENEFITS") = 0
                    End If
                    If Not newValues("EXPENDITURE") Is Nothing AndAlso Decimal.TryParse(newValues("EXPENDITURE").ToString(), decValue) Then
                        newRow.Item("EXPENDITURE") = decValue
                    Else
                        newRow.Item("EXPENDITURE") = 0
                    End If

                    If newRow.Item("EMPID").ToString.Trim <> "" Or newRow.Item("POSITIONID").ToString.Trim <> "" Then
                        dt.Rows.InsertAt(newRow, 0)
                    End If
                Case GridBatchEditingCommandType.Delete
                    For Each row As DataRow In dt.Select("ID='" + oldValues("ID").ToString() + "'")
                    Row.Delete()
                    Next
                    dt.AcceptChanges()
                    'Reset RowID
                    i = 1
                    dt.DefaultView.Sort = "ID ASC"
                    dt = dt.DefaultView.ToTable()
                    dt.Columns("ID").ReadOnly = False
                    For Each row As DataRow In dt.Rows
                        row.Item("ID") = i
                        i += 1
                    Next
                    dt.AcceptChanges()
                Case GridBatchEditingCommandType.Update
                    If oldValues IsNot Nothing And newValues IsNot Nothing Then
                        If oldValues.Count > 0 And newValues.Count > 0 Then
                            Dim curRow = dt.Select("ID='" + oldValues("ID").ToString() + "'").ToList()
                            If curRow.Count() > 0 Then
                            End If

                            For Each row As DataRow In dt.Select("ID='" + oldValues("ID").ToString() + "'")
                                row.Delete()
                            Next
                            For Each row As DataRow In dt.Select("ID='" + newValues("ID").ToString() + "'")
                                row.Delete()
                            Next
                            dt.AcceptChanges()

                            Dim newRow As DataRow = dt.NewRow()
                            newRow.Item("ID") = oldValues("ID")
                            newRow.Item("EMPID") = If(newValues("EMPID") Is Nothing, "", newValues("EMPID"))
                            newRow.Item("EmployeeName") = ddlEmpName.Text
                            newRow.Item("POSITIONID") = If(newValues("POSITIONID") Is Nothing, "", newValues("POSITIONID"))
                            newRow.Item("PositionTitle") = ddlPosition.Text
                            If Not newValues("DATEPAYENDED") Is Nothing AndAlso Date.TryParse(newValues("DATEPAYENDED").ToString(), dateValue) Then
                                newRow.Item("DATEPAYENDED") = dateValue.ToShortDateString
                            Else
                                newRow.Item("DATEPAYENDED") = DBNull.Value
                            End If
                            If Not newValues("HR") Is Nothing AndAlso Decimal.TryParse(newValues("HR").ToString(), decValue) Then
                                newRow.Item("HR") = decValue
                            Else
                                newRow.Item("HR") = 0
                            End If
                            'If Not newValues("TotalHoursWorked") Is Nothing AndAlso Decimal.TryParse(newValues("TotalHoursWorked").ToString(), decValue) Then
                            '    newRow.Item("TotalHoursWorked") = decValue
                            'Else
                            '    newRow.Item("TotalHoursWorked") = 0
                            'End If
                            If Not newValues("DATEPAID") Is Nothing AndAlso Date.TryParse(newValues("DATEPAID").ToString(), dateValue) Then
                                newRow.Item("DATEPAID") = dateValue.ToShortDateString
                            Else
                                newRow.Item("DATEPAID") = DBNull.Value
                            End If
                            newRow.Item("CHKNO") = If(newValues("CHKNO") Is Nothing, "", newValues("CHKNO"))
                            If Not newValues("SALARY") Is Nothing AndAlso Decimal.TryParse(newValues("SALARY").ToString(), decValue) Then
                                newRow.Item("SALARY") = decValue
                            Else
                                newRow.Item("SALARY") = DBNull.Value
                            End If
                            If Not newValues("FICA") Is Nothing AndAlso Decimal.TryParse(newValues("FICA").ToString(), decValue) Then
                                newRow.Item("FICA") = decValue
                            Else
                                newRow.Item("FICA") = 0
                            End If
                            If Not newValues("MEDICARE") Is Nothing AndAlso Decimal.TryParse(newValues("MEDICARE").ToString(), decValue) Then
                                newRow.Item("MEDICARE") = decValue
                            Else
                                newRow.Item("MEDICARE") = 0
                            End If
                            'If Not newValues("DentalInsurance") Is Nothing AndAlso Decimal.TryParse(newValues("DentalInsurance").ToString(), decValue) Then
                            '    newRow.Item("DentalInsurance") = decValue
                            'Else
                            '    newRow.Item("DentalInsurance") = 0
                            'End If
                            'If Not newValues("VisionInsurance") Is Nothing AndAlso Decimal.TryParse(newValues("VisionInsurance").ToString(), decValue) Then
                            '    newRow.Item("VisionInsurance") = decValue
                            'Else
                            '    newRow.Item("VisionInsurance") = 0
                            'End If
                            'If Not newValues("Retirement") Is Nothing AndAlso Decimal.TryParse(newValues("Retirement").ToString(), decValue) Then
                            '    newRow.Item("Retirement") = decValue
                            'Else
                            '    newRow.Item("Retirement") = 0
                            'End If
                            If Not newValues("SF") Is Nothing AndAlso Decimal.TryParse(newValues("SF").ToString(), decValue) Then
                                newRow.Item("SF") = decValue
                            Else
                                newRow.Item("SF") = 0
                            End If
                            If Not newValues("WC") Is Nothing AndAlso Decimal.TryParse(newValues("WC").ToString(), decValue) Then
                                newRow.Item("WC") = decValue
                            Else
                                newRow.Item("WC") = 0
                            End If
                            If Not newValues("OTHER") Is Nothing AndAlso Decimal.TryParse(newValues("OTHER").ToString(), decValue) Then
                                newRow.Item("OTHER") = decValue
                            Else
                                newRow.Item("OTHER") = 0
                            End If
                            If Not newValues("BENEFITS") Is Nothing AndAlso Decimal.TryParse(newValues("BENEFITS").ToString(), decValue) Then
                                newRow.Item("BENEFITS") = decValue
                            Else
                                newRow.Item("BENEFITS") = 0
                            End If
                            If Not newValues("EXPENDITURE") Is Nothing AndAlso Decimal.TryParse(newValues("EXPENDITURE").ToString(), decValue) Then
                                newRow.Item("EXPENDITURE") = decValue
                            Else
                                newRow.Item("EXPENDITURE") = 0
                            End If

                            dt.Rows.InsertAt(newRow, 0)
                        End If
                    End If
            End Select

            Session("dtPersonExp") = dt
            dgPersonExp.DataSource = dt
            dgPersonExp.Rebind()
            dgPersonExp.Focus()
        Next

    End Sub
#End Region

 

 
0
Attila Antal
Telerik team
answered on 22 Mar 2021, 10:22 AM

Hi Steve,

Try making a Test by removing the "throw 'Telerik grid insert/update';" statements from each method. If you would like to log the execution of the script, use console.log("Message").

function BatchEditCellValueChanged(sender, args) {
    SaveGrid(sender, args);
    //throw 'Telerik grid insert/update'; // remove this line
}

function SaveGrid(sender, args) {
    var tableView = args.get_tableView();
    var batchEditingManager = sender.get_batchEditingManager();
    batchEditingManager.saveChanges(tableView);
    //throw 'Telerik grid insert/update'; // remove this line
}

If I place the "throw 'Telerik grid insert/update';" in my sample code, the Grid won't work as expected. 

I've tried the same approach from the grid you shared and it works in all major browsers (Internet Explorer, Google Chrome, Microsoft Edge, and Mozilla Firefox). Check the attached solution.

Regards,
Attila Antal
Progress Telerik

Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.

Tags
Grid
Asked by
Kathleen Johnson
Top achievements
Rank 1
Answers by
Steve
Top achievements
Rank 1
Attila Antal
Telerik team
Share this question
or