or
Hello.
In order to familiarize with the RadGrid component, I have created a small application whose grid is populated by a web service.
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <telerik:RadGrid ID="RadGrid1" runat="server"> <MasterTableView> <Columns> <telerik:GridBoundColumn DataField="ID" HeaderText="ID" DataType="System.Int32" /> <telerik:GridBoundColumn DataField="Name" HeaderText="Name" DataType="System.String" /> </Columns> </MasterTableView> <ClientSettings> <DataBinding Location="WebService.cs" SelectMethod="RetrieveRows" /> </ClientSettings> </telerik:RadGrid> </form> </body> </html>using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ServiceModel; using Telerik.Web.UI; namespace WebApplication1 { [ServiceContract(Namespace = "")] [System.Web.Script.Services.ScriptService] public class WebService { public WebService () { } [OperationContract] public Dictionary<string, object> RetrieveRows(int startRowIndex, int maximumRows, List<GridSortExpression> sortExpression, List<GridFilterExpression> filterExpression) { Dictionary<string, object> dictionary = new Dictionary<string, object>(); dictionary.Add("Data", new[] { new { ID = 1234, Name = "Test" }}); dictionary.Add("Count", 1); return dictionary; } } }The compilation was successful, but the following error message was displayed at runtime by the built-in script debugger of Internet Explorer:
Line: 6563
Error: Sys.ArgumentException: Cannot deserialize empty string.
Parameter name: data
I would appreciate whether some assistance could be provided to solve this problem.
Last but not least:
a) I was wondering how the application could be implemented using a server-side binding solution.
b) What is Telerik's recommendation in regard to client versus server-side binding implementations using a web service?
Thank you in advance.
Paulo
<telerik:RadGrid ID="testEdit" AllowMultiRowEdit="True" ShowFooter="false" ShowStatusBar="true" runat="server" ShowHeader="false" AutoGenerateColumns="true"> <MasterTableView CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage"> <CommandItemSettings ShowRefreshButton="false" AddNewRecordText="Add User & Employee" /><!--numeric filter box -->
<TD style="WHITE-SPACE: nowrap"> <SPAN style="WHITE-SPACE: nowrap" id=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_RNTBF_LineNum_wrapper class="RadInput RadInput_IP"> <INPUT style="WIDTH: 125px" id=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_RNTBF_LineNum_text class="riTextBox riEnabled" onkeypress="if((event.keyCode == 13 || event.keyCode == 20)){event.returnValue=false; return false;}" alt="Filter LineNum column" type=text name=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_RNTBF_LineNum_text> <INPUT style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: -18px 0px 0px -1px; PADDING-LEFT: 0px; WIDTH: 1px; PADDING-RIGHT: 0px; HEIGHT: 1px; VISIBILITY: hidden; OVERFLOW: hidden; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" id=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_RNTBF_LineNum class=rdfd_ title="" type=text> <INPUT style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: -18px 0px 0px -1px; PADDING-LEFT: 0px; WIDTH: 1px; PADDING-RIGHT: 0px; HEIGHT: 1px; VISIBILITY: hidden; OVERFLOW: hidden; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" id=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_RNTBF_LineNum_Value class=rdfd_ title="" type=text name=tabs$tabExportDetail$rgExportDetail$ctl00$ctl02$ctl03$RNTBF_LineNum> <INPUT id=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_RNTBF_LineNum_ClientState type=hidden name=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_RNTBF_LineNum_ClientState autocomplete="off"> </LINK> </SPAN> <INPUT id=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_Filter_LineNum class=rgFilter title=Filter onclick='$find("tabs_tabExportDetail_rgExportDetail")._showFilterMenu("tabs_tabExportDetail_rgExportDetail_ctl00", "LineNum", event); return false;' type=submit name=tabs$tabExportDetail$rgExportDetail$ctl00$ctl02$ctl03$Filter_LineNum></TD><TD style="WHITE-SPACE: nowrap"> <INPUT id=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_FilterTextBox_ProductNum class=rgFilterBox onkeypress="if((event.keyCode == 13 || event.keyCode == 20)) return false;" alt="Filter ProductNum column" size=10 type=text name=tabs$tabExportDetail$rgExportDetail$ctl00$ctl02$ctl03$FilterTextBox_ProductNum> <INPUT id=tabs_tabExportDetail_rgExportDetail_ctl00_ctl02_ctl03_Filter_ProductNum class=rgFilter title=Filter onclick='$find("tabs_tabExportDetail_rgExportDetail")._showFilterMenu("tabs_tabExportDetail_rgExportDetail_ctl00", "ProductNum", event); return false;' value=" " type=submit name=tabs$tabExportDetail$rgExportDetail$ctl00$ctl02$ctl03$Filter_ProductNum></TD>