dojo - 来自sql server的数据网格和图表的数据

时间:2012-05-14 18:56:44

标签: sql-server-2008 dojo

我刚刚开始熟悉dojo并创建小部件,并且有一个Web UI,我现在想要填充数据。我的问题仅仅是获得一些关于如何做到这一点的参考或想法。我的数据库都是sql server 2008,我通常使用microsoft.net。我认为我可能必须创建一个调用sql查询的服务,并将结果转换为json并将其提供给小部件,无论是数据网格还是图表。只是不确定如何做到这一点,如果确实可以做到这一点。任何想法都赞赏。

编辑:

       store = new dojo.data.ItemFileWriteStore({
            url: "hof-batting.json"
        });

        ngrid = new dojox.grid.DataGrid({
            store: store,
            id: 'ngrid',
            structure: [
                { name: "Search Term", field: "searchterm", width: "10%" },
                { name: "Import Date", field: "importDate", width: "10%" }
            ]
        }, "grid");


        ngrid.startup();

我想将从我的Web服务返回的数据添加到此数据网格,并使用相同的原理将数据添加到图表中。

1 个答案:

答案 0 :(得分:1)

您准确描述了您需要做的事情。

我们使用C#查询数据库以获取数据,然后将其转换为json。我们现在使用多种技术进行json序列化。我建议使用JSON.NET。这是.NET MVC团队将要使用的内容。我不会使用当前属于.NET的DataContractSerialization。

http://json.codeplex.com/

我们有时会在页面上放置JSON,javascript会将其作为页面变量访问。其他时候我们称之为.NET服务。我们使用WCF,并且我们还使用了.ashx文件来为Web客户端提供json数据。

json的结构将是你的dojo小部件和web服务器之间的契约。我会使用图表小工具或商店需要的东西来开始定义合同的过程。

修改

WCF接口

[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/data/{service}/", 
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
String RetrieveData(string service, Stream streamdata);

实现返回一个json字符串。这将作为json发送到浏览器,但它由.NET由xml节点包装。我有一个实用功能,可以清除它。

MyUtil._xmlPrefix = 
    '<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">';
MyUtil._xmlPostfix = '</string>';

MyUtil.CleanJsonResponse = function(data) {
    // summary: 
    //    a method that cleans a .NET response and converts it 
    //    to a javascript object with the JSON. 
    //    The .NET framework, doesn't easily allow for custom serialization,
    //    so the results are shipped as a string and we need to remove the 
    //    crap that Microsoft adds to the response.
    var d = data;
    if (d.startsWith(MyUtil._xmlPrefix)) {
        d = d.substring(MyUtil._xmlPrefix.length);
    }
    if (d.endsWith(MyUtil._xmlPostfix)) {
        d = d.substring(0, d.length - MyUtil._xmlPostfix.length);
    }

    return dojo.fromJson(d);
};

// utility methods I have added to string
String.prototype.startsWith = function(str) { 
  return this.slice(0, str.length) == str;
};
String.prototype.endsWith = function(str) { 
  return this.slice(-str.length) == str;
};