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

Client-Side Data Binding using Page Methods Cannot Sum Footers

1 Answer 100 Views
Grid
This is a migrated thread and some comments may be shown as answers.
James
Top achievements
Rank 1
James asked on 09 Dec 2013, 09:47 PM
I followed the Telerik example to perform client-side data binding using Page Methods/WebMethods and it's working great: Client Side Binding.

I'm trying to display a footer for the grid (not at the group level) with sums of the columns (to start I've only tried it with the first couple of numeric columns).  The footer sums show up but the totals are always 0.

This is the page I've created:
head runat="server">
    <title></title>
    <script type="text/javascript" src="jquery-1.8.2.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#lbtnGo').click(function () {
                SaveGridValues();
            });
        });
    </script>
    <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
        <script type="text/javascript">
            function SaveGridValues() {
                var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                var Updates = new Array();
                for (var i = 0; i <= tableView._dataItems.length - 1; i++) {
 
                    var dataItem = tableView._dataItems[i];
                    var row = dataItem.get_element();
 
                    var label = row.children[0].children[0];
                    var Appx = label.innerText;
 
                    var checkBox = row.children[1].children[0];
                    var ZeroCostAppx = checkBox.checked;
 
                    var rtb0102InstHoursPer = tableView._dataItems[i].findControl("rtb0102InstHoursPer");
                    var current_rtb0102InstHoursPer = rtb0102InstHoursPer._value
 
                    var rtb0102InstAmountPer = tableView._dataItems[i].findControl("rtb0102InstAmountPer");
                    var current_rtb0102InstAmountPer = rtb0102InstAmountPer._value
 
                    var rtb0111TravelHoursPer = tableView._dataItems[i].findControl("rtb0111TravelHoursPer");
                    var current_rtb0111TravelHoursPer = rtb0111TravelHoursPer._value
 
                    var rtb0111TravelAmountPer = tableView._dataItems[i].findControl("rtb0111TravelAmountPer");
                    var current_rtb0111TravelAmountPer = rtb0111TravelAmountPer._value
 
 
                    var bd = new Object();
                    bd.appx = Appx;
                    bd.a01_02InstAmountPer = current_rtb0102InstAmountPer;
                    bd.a01_02InstHoursPer = current_rtb0102InstHoursPer;
                    bd.a01_11TravelAmountPer = current_rtb0111TravelAmountPer;
                    bd.a01_11TravelHoursPer = current_rtb0111TravelHoursPer;
                    bd.ZeroCostAppx = ZeroCostAppx;
 
                    Updates.push(bd);
                }
                PageMethods.UpdateBD("ACCS110155", Updates, GetData);
            }
        </script>
        <script type="text/javascript">
            function pageLoad(sender, eventArgs) {
                var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                GetData();
            }
 
            function GetData() {
                PageMethods.GetData("ACCS110155", updateGrid);
            }
 
            function RadGrid1_Command(sender, args) {
                   //left blank
            }
 
            function updateGrid(result) {
                var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                tableView.set_dataSource(result);
                tableView.dataBind();
            }
 
            function RadGrid1_RowDataBound(sender, args) {
 
                var chkZeroCost = args.get_item().findControl("chkZeroCostAppx");
                if (chkZeroCost != null) {
                    chkZeroCost.checked = args.get_dataItem()["ZeroCostAppx"];
                }
 
                var radTextBox1 = args.get_item().findControl("rtb0102InstHoursPer"); // find control
                radTextBox1.set_value(args.get_dataItem()["_01_02InstHoursPer"]);
 
                var radTextBox2 = args.get_item().findControl("rtb0102InstAmountPer"); // find control
                radTextBox2.set_value(args.get_dataItem()["_01_02InstAmountPer"]);
 
                var rtb0111TravelHoursPer = args.get_item().findControl("rtb0111TravelHoursPer"); // find control
                rtb0111TravelHoursPer.set_value(args.get_dataItem()["_01_11TravelHoursPer"]);
 
                var rtb0111TravelAmountPer = args.get_item().findControl("rtb0111TravelAmountPer"); // find control
                rtb0111TravelAmountPer.set_value(args.get_dataItem()["_01_11TravelAmountPer"]);
 
            }
        </script>
    </telerik:RadCodeBlock>
</head>
<body>
    <form id="form1" runat="server">
    <telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
    <div>
        <telerik:RadGrid ID="RadGrid1" EnableViewState="false" runat="server" AllowPaging="false"
            AllowSorting="True" AllowFilteringByColumn="false" GridLines="None">
            <ItemStyle Wrap="false"></ItemStyle>
            <MasterTableView AllowMultiColumnSorting="true" TableLayout="Fixed" BackColor="#f2f2f2" ShowFooter="true">
                <Columns>
                    <telerik:GridTemplateColumn DataField="Appx" HeaderText="Appx">
                        <ItemTemplate>
                            <asp:Label ID="lblAppx" runat="server"></asp:Label>
                        </ItemTemplate>
                    </telerik:GridTemplateColumn>
                    <telerik:GridTemplateColumn DataField="ZeroCostAppx" HeaderText="No cost">
                        <ItemTemplate>
                            <asp:CheckBox ID="chkZeroCostAppx" runat="server" />
                        </ItemTemplate>
                    </telerik:GridTemplateColumn>
                    <telerik:GridTemplateColumn DataField="_01_02InstHoursPer" HeaderText="_01_02InstHoursPer" Aggregate="Sum" DataType="System.Decimal">
                        <ItemTemplate>
                            <telerik:RadNumericTextBox ID="rtb0102InstHoursPer" runat="server" Width="70px" BorderColor="Transparent">
                            </telerik:RadNumericTextBox>
                        </ItemTemplate>
                        <FooterTemplate>
                            <telerik:RadNumericTextBox ID="rtb0102InstHoursPerFOOTER" runat="server">
                                <ClientEvents OnLoad="Load" />
                            </telerik:RadNumericTextBox>
                        </FooterTemplate>
                    </telerik:GridTemplateColumn>
                    <telerik:GridTemplateColumn DataField="_01_02InstAmountPer" HeaderText="_01_02InstAmountPer" Aggregate="Sum" DataType="System.Decimal" UniqueName="_01_02InstAmountPer">
                        <ItemTemplate>
                            <telerik:RadNumericTextBox ID="rtb0102InstAmountPer" runat="server" Width="70px"
                                BorderColor="Transparent" Type="Currency">
                            </telerik:RadNumericTextBox>
                        </ItemTemplate>
                    </telerik:GridTemplateColumn>
                    <telerik:GridTemplateColumn DataField="_01_11TravelHoursPer" HeaderText="_01_11TravelHoursPer">
                        <ItemTemplate>
                            <telerik:RadNumericTextBox ID="rtb0111TravelHoursPer" runat="server" Width="70px"
                                BorderColor="Transparent">
                            </telerik:RadNumericTextBox>
                        </ItemTemplate>
                    </telerik:GridTemplateColumn>
                    <telerik:GridTemplateColumn DataField="_01_11TravelAmountPer" HeaderText="_01_11TravelAmountPer">
                        <ItemTemplate>
                            <telerik:RadNumericTextBox ID="rtb0111TravelAmountPer" runat="server" Width="70px"
                                BorderColor="Transparent" Type="Currency">
                            </telerik:RadNumericTextBox>
                        </ItemTemplate>
                    </telerik:GridTemplateColumn>
                </Columns>
            </MasterTableView>
            <ClientSettings>
                <ClientEvents OnCommand="RadGrid1_Command" OnRowDataBound="RadGrid1_RowDataBound">
                </ClientEvents>
            </ClientSettings>
        </telerik:RadGrid>
    </div>
    <div>
        <asp:LinkButton ID="lbtnGo" runat="server" Text="Go" OnClientClick="return false;"></asp:LinkButton>
    </div>
    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
    </telerik:RadAjaxLoadingPanel>
    </form>
</body>

The Code-Behind:
public partial class _Default : System.Web.UI.Page
{
    protected override void OnInit(System.EventArgs e)
    {
        base.OnInit(e);
        RadScriptManager.GetCurrent(this).EnablePageMethods = true;
    }
 
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static List<BudgetedDollar> GetData(string JobNumber)
    {
        DataClassesDataContext db = new DataClassesDataContext(ConfigurationManager.ConnectionStrings["JM_ConnStringUser"].ToString());
        var resultItems = (from BudgetedDollar dr in db.BudgetedDollars.Where(x => x.JobNumber.Equals(JobNumber)).AsEnumerable()
                           select dr).ToList<BudgetedDollar>();
        return resultItems;
    }
 
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static void UpdateBD(string JobNumber, Object o)
    {
         
        DataClassesDataContext db = new DataClassesDataContext(ConfigurationManager.ConnectionStrings["JM_ConnStringUser"].ToString());
        try
        {
            for (int i = 0; i < ((object[])(o)).Length; i++)
            {
                db.sp_Update_BudgetedDollars(
                    JobNumber,
                    Int16.Parse(((System.Collections.Generic.Dictionary<string, object>)((object[])(o))[i])["appx"].ToString()),
                    Boolean.Parse(((System.Collections.Generic.Dictionary<string, object>)((object[])(o))[i])["ZeroCostAppx"].ToString()),
 
                    Decimal.Parse(((System.Collections.Generic.Dictionary<string, object>)((object[])(o))[i])["a01_02InstHoursPer"].ToString()),
                    Decimal.Parse(((System.Collections.Generic.Dictionary<string, object>)((object[])(o))[i])["a01_02InstAmountPer"].ToString()),
                    Decimal.Parse(((System.Collections.Generic.Dictionary<string, object>)((object[])(o))[i])["a01_11TravelHoursPer"].ToString()),
                    Decimal.Parse(((System.Collections.Generic.Dictionary<string, object>)((object[])(o))[i])["a01_11TravelAmountPer"].ToString()),
                    );
            }
 
        }
        catch (Exception ex)
        {  }
    }
}

Thanks for your help,

James

1 Answer, 1 is accepted

Sort by
0
Vasil
Telerik team
answered on 12 Dec 2013, 04:11 PM
Hi James,

I see your footer templates in your code, but I do not see the code for calculations.
You can see an example of calculation in the footers in this help topic. See the last section "Client-side calculation of totals for a template column"
http://www.telerik.com/help/aspnet-ajax/grid-totals-in-footers.html

Regards,
Vasil
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to the blog feed now.
Tags
Grid
Asked by
James
Top achievements
Rank 1
Answers by
Vasil
Telerik team
Share this question
or