C# telerik radgrid的客户端绑定在数据绑定后未更新

C# telerik radgrid的客户端绑定在数据绑定后未更新,c#,asp.net,data-binding,telerik,telerik-grid,C#,Asp.net,Data Binding,Telerik,Telerik Grid,我正在尝试使用客户端api绑定radgrid 我调用javascript函数doUpdatesBID function DoUpdate(sbiId) { var input = '{"SbiId":"' + sbiId+ '"}'; var dataSource; $.ajax({ url: "http://localhost/Meta.WebService/DataService.svc/GetData", type: "POST",

我正在尝试使用客户端api绑定radgrid

我调用javascript函数doUpdatesBID

function DoUpdate(sbiId) {
    var input = '{"SbiId":"' + sbiId+ '"}';
    var dataSource;

    $.ajax({ url: "http://localhost/Meta.WebService/DataService.svc/GetData",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: input,
        dataType: "json",
        success: function(data) {
            updateGrid(data);
        }
    });
}

function updateGrid(result) {
    var mtv = RadGridSprintBackLogItemDetailsInstance().get_masterTableView();
    mtv.set_dataSource(result);
    mtv.dataBind();
}
ajax调用返回看似正确的JSON数据;以下是每个fiddler的响应内容:

{d:[{u类型:sbi修订版:Meta.Scrum,分配给:罗杰 Ng,ChangedBy:Bob Hung,ChangedDate:8/8/2011 3:48:31 PM,描述:,状态:未完成,标题:火星单位 测试,工作估计:50,剩余工作:50},{类型:SBIRevision:Meta.Scrum,分配给:Roger Ng,ChangedBy:Roger Ng,ChangedDate:8/8/2011 5:12:46 PM,描述:,状态:进行中,标题:火星单位 测试,工作估计:50,剩余工作:50},{类型:SBIRevision:Meta.Scrum,分配给:Roger Ng,ChangedBy:Roger Ng,ChangedDate:8/8/2011 5:13:39 PM,描述:,状态:进行中,标题:火星单位 测试,工作估计:50,剩余工作:50},{类型:SBIRevision:Meta.Scrum,分配给:Roger Ng,ChangedBy:Roger Ng,ChangedDate:8/8/2011 5:14:25 PM,描述:遇到…指向错误的版本 服务,状态:进行中,标题:火星单位 测试,工作估计:50,剩余工作:50},{类型:SBIRevision:Meta.Scrum,分配给:Roger Ng,ChangedBy:Bob Hung,ChangedDate:8/10/2011 10:59:09 AM,描述:遇到…指向错误的版本 服务,状态:进行中,标题:火星单位 测试,工作估计:50,剩余工作:50},{类型:SBIRevision:Meta.Scrum,分配给:Roger Ng,ChangedBy:Roger Ng,ChangedDate:8/11/2011 12:04:09 PM,描述:遇到…指向错误的版本 服务,状态:完成,标题:火星单位 测试,工作估计:50,剩余工作:50}]}

下面是我如何在aspx页面上声明我的radgrid

<telerik:RadGrid runat="server" ID="RadGridSprintBackLogItemDetails" EnableViewState="false" EnableEmbeddedSkins="false" Skin="Meta">
    <MasterTableView AutoGenerateColumns="false" EnableNoRecordsTemplate="true" ShowHeadersWhenNoRecords="true">
        <ItemStyle Wrap="false"></ItemStyle>
        <NoRecordsTemplate>
            <div style="margin-left: 5px;">
                Select a Sprint Backlog Item (SBI) from above to view its Revisions</div>
        </NoRecordsTemplate>
        <Columns>
            <telerik:GridBoundColumn DataField="ChangedDate" HeaderText="Changed Date">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Title" HeaderText="Title">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="Description" HeaderText="Description">
            <ItemStyle Wrap="false"></ItemStyle>
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="AssignedTo" HeaderText="Assigned To">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="WorkEstimate" HeaderText="Work Estimate">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="WorkRemaining" HeaderText="Work Remaining">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="State" HeaderText="State">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="ChangedBy" HeaderText="Changed By">
            </telerik:GridBoundColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

奇怪的是,在返回并绑定数据后,会出现无记录模板。

更改updateGrid函数,如下所示:使用result.d进行绑定:

function updateGrid(result) {
  var mtv = RadGridSprintBackLogItemDetailsInstance().get_masterTableView();
  mtv.set_dataSource(result.d);
  mtv.dataBind(); 
}
希望,这会有所帮助。

当与set_数据源绑定时,需要传递实际的数据对象数组。您得到的jQuery结果包含名为.d的字段中的数据数组。这就是为什么需要使用result.d


另外,您知道RadGrid可以自动绑定到WCF Web服务吗?请参阅以获取一个实际示例。服务设置通过标记直接在RadGrid的定义中指定。RadGrid然后自动连接到数据服务,检索结果和数据绑定。

非常感谢!因为A.d.而沮丧的一天!我想我不会很快忘记…我认为这是最好的答案,因为它解释了为什么-然后再说一遍,大多数人只是想让它发挥作用并继续前进。。。。示例代码将使它变得更好。