Web services Telerik RadGrid绑定到没有Linq的web服务

Web services Telerik RadGrid绑定到没有Linq的web服务,web-services,data-binding,telerik,radgrid,dataview,Web Services,Data Binding,Telerik,Radgrid,Dataview,我想在不使用Linq的情况下将Telerik RadGrid绑定到web服务。在我能找到的所有示例中,web服务都必须返回(MyObject的)列表;我试过这个,效果很好。但是,我绑定到的表在运行时可能有额外的列,或者列可能有不同的数据类型,因此我不能在编译时使用静态MyObject类来表示表。我也不知道在编译时哪些列需要显示在网格中。出于性能原因,我想绑定到web服务 我尝试过让web服务方法返回一个DataView,并用许多不同的方式转换它,但它不起作用。如何编写web服务的GetData/

我想在不使用Linq的情况下将Telerik RadGrid绑定到web服务。在我能找到的所有示例中,web服务都必须返回(MyObject的)列表;我试过这个,效果很好。但是,我绑定到的表在运行时可能有额外的列,或者列可能有不同的数据类型,因此我不能在编译时使用静态MyObject类来表示表。我也不知道在编译时哪些列需要显示在网格中。出于性能原因,我想绑定到web服务

我尝试过让web服务方法返回一个DataView,并用许多不同的方式转换它,但它不起作用。如何编写web服务的GetData/GetDataAndCount方法以从DataView或其他非linq数据源返回数据


谢谢。

您可以序列化类似的数据表。以下是一个例子:

    <telerik:RadGrid ID="RadGrid1" AllowPaging="true" runat="server">
        <MasterTableView>
            <Columns>
                <telerik:GridBoundColumn DataField="CustomerID" HeaderText="ID" />
                <telerik:GridBoundColumn DataField="CompanyName" HeaderText="Name" />
                <telerik:GridBoundColumn DataField="ContactName" HeaderText="Contact" />
                <telerik:GridBoundColumn DataField="Country" HeaderText="Country" />
                <telerik:GridBoundColumn DataField="City" HeaderText="City" />
            </Columns>
        </MasterTableView>
        <PagerStyle AlwaysVisible="true" />
        <ClientSettings>
            <DataBinding Location="WebService.asmx" SelectMethod="GetDataAndCount" />
        </ClientSettings>
    </telerik:RadGrid>

    <%@ WebService Language="C#" Class="WebService" %>

using System.Data;
using System.Linq;
using System.Web.Services;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
    [WebMethod(EnableSession = true)]
    public Telerik.Web.UI.GridBindingData GetDataAndCount(int startRowIndex, int maximumRows)
    {
        var table = GetDataTable("select * from customers");

        var columns = table.Columns.Cast<System.Data.DataColumn>();

        var data = table.AsEnumerable()
            .Select(r => columns.Select(c => new { Column = c.ColumnName, Value = r[c] })
            .ToDictionary(i => i.Column, i => i.Value != System.DBNull.Value ? i.Value : null))
            .Skip(startRowIndex).Take(maximumRows)
            .ToList<object>();

        return new Telerik.Web.UI.GridBindingData() { Data = data, Count = table.Rows.Count };
    }

    public System.Data.DataTable GetDataTable(string query)
    {
        var connString = System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
        var conn = new System.Data.SqlClient.SqlConnection(connString);
        var adapter = new System.Data.SqlClient.SqlDataAdapter();
        adapter.SelectCommand = new System.Data.SqlClient.SqlCommand(query, conn);

        var table = new System.Data.DataTable();

        conn.Open();
        try
        {
            adapter.Fill(table);
        }
        finally
        {
            conn.Close();
        }

        return table;
    }
}

使用系统数据;
使用System.Linq;
使用System.Web.Services;
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
//要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行。
[System.Web.Script.Services.ScriptService]
公共类WebService:System.Web.Services.WebService
{
[WebMethod(EnableSession=true)]
public Telerik.Web.UI.GridBindingData GetDataAndCount(int startRowIndex,int maximumRows)
{
var table=GetDataTable(“从客户中选择*);
var columns=table.columns.Cast();
var数据=表。可计算()
.Select(r=>columns.Select(c=>new{Column=c.ColumnName,Value=r[c]})
.ToDictionary(i=>i.Column,i=>i.Value!=System.DBNull.Value?i.Value:null))
.Skip(startRowIndex).Take(最大行数)
.ToList();
返回新的Telerik.Web.UI.GridBindingData(){Data=Data,Count=table.Rows.Count};
}
public System.Data.DataTable GetDataTable(字符串查询)
{
var connString=System.Configuration.ConfigurationManager.ConnectionString[“NorthwindConnectionString”].ConnectionString;
var conn=new System.Data.SqlClient.SqlConnection(connString);
var adapter=new System.Data.SqlClient.SqlDataAdapter();
adapter.SelectCommand=new System.Data.SqlClient.SqlCommand(query,conn);
var table=new System.Data.DataTable();
conn.Open();
尝试
{
适配器。填充(表格);
}
最后
{
康涅狄格州关闭();
}
返回表;
}
}