我的环境是sql2000+vs2005+ext2.0,其实开发东西的时候几乎都是从数据库里面提取数据,然后在ext2.0设计的界面上显示出来,我看了不少这方面 的资料,不少是vs2008环境下的,vs2005下的不多,能详细把这个功能实现的流程详细的说一下吗?

解决方案 »

  1.   

    ext通过异步请求一个aspx,ashx,或是web service来取得数据,服务端返回一个json.然后显示客户端接收并显示.
      

  2.   

    其实哪来什么vs2008,vs2005(这只是开发工具罢了),他们之间也就是dotnetframework(2。0,3.0)的版本,在你说的这方面使用,你完全可以参考网上的文章来弄,个别使用了3.0,3.5采用的新特性,你也可以在理解其语句意思利用2.0来实现,没什么太大的难度。有问题可以随时提嘛,论坛强人多
      

  3.   

    很多人用vs2008+dotnetframework2.0开发,别看标题写着vs2008利用extjs开发,其实它里面很多也就用到个lamda表达式,这个在2.0实现同等效果不是没办法只是稍微麻烦点,其他的特性我看要么就都没用,要么就有刚才说的lamda,何况这个后台和extjs本身没太大关联。
      

  4.   

    Default.htm:<!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>
        <title>Untitled Page</title>
        <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />
        <script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
        <script type="text/javascript" src="ext/ext-all.js"></script>  
    </head>
    <body>
    <div id="listContainer"></div>
    <script type="text/javascript">
    var store = new Ext.data.JsonStore({
        url: 'DefaultHandler.ashx?method=getlist',
        root: 'items',
        remoteSort: true,
        fields: [
    'TestName',
    'TestValue'
        ],
        listeners:{
            load: function(store, records, options){
                     grid.render();
            },
            loadexception: function(proxy, options, response){
            Ext.Msg.alert('Load data error!', response.responseText);
            }
        }
    });Ext.onReady(function(){
        Ext.QuickTips.init();
        store.load();
    });var listContainer=Ext.get("listContainer"); 
    var grid = new Ext.grid.GridPanel({
        el: 'listContainer',
        width:listContainer.getComputedWidth(),
        autoHeight: true,
        store: store,
        disableSelection: false,
        loadMask: true,
        deferRowRender: false,
        sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
        columns:[
        {
    header: 'name',
    dataIndex: 'TestName',
        sortable: true
        },{
    header: 'value',
    dataIndex: 'TestValue',
    sortable: true
        }]
    });window.onresize=function(){
            grid.setWidth(listContainer.getComputedWidth());
    };
    </script>
    </body>
    </html>
    DefaultHandler.ashx:<%@ WebHandler Language="C#" Class="DefaultHandler" %>using System;
    using System.Web;
    using System.Data;public class DefaultHandler : IHttpHandler {
        
        public void ProcessRequest (HttpContext context) {
            string str = context.Request.QueryString["method"];
            if (string.IsNullOrEmpty(str))
            {
                context.Response.Write("error!");
                return;
            }        switch (str)
            { 
                case "getlist":
                    GetList(context);
                    break;
                    
            }
        }
     
        public bool IsReusable {
            get {
                return false;
            }
        }    public void GetList(HttpContext context)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("TestName", typeof(string));
            dt.Columns.Add("TestValue", typeof(string));
            for (int i = 0; i < 6; i++)
            {
                DataRow dr = dt.NewRow();
                dr["TestName"] = "TestName" + i.ToString();
                dr["TestValue"] = "TestValue" + i.ToString();
                dt.Rows.Add(dr);
            }
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("{items: [");
            foreach (DataRow dr in dt.Rows)
            {
                sb.Append("{");
                sb.AppendFormat("TestName:'{0}',TestValue:'{1}'", dr[0], dr[1]);
                sb.Append("},");
            }        context.Response.Write(sb.ToString().Trim(',') + "]}");
        }
    }
      

  5.   

    在Default.htm中.我已经得到了这个后台返回的数据源(store ),
    我可以对他进行显示.
    上例中我只是把它绑定到了一个grid上.
      

  6.   

    对于DefaultHandler.ashx中,我没有去数据库中查询,只是简单构造了一个datatable,
    实际开发中你可能要在这里访问你的数据库来拿数据
    而在把datatable转成json的时候可以借助一些其它的组件来实现,如Newtonsoft.Json等..
      

  7.   

    alert(store.data.items[0].data.TestName);
    alert(store.data.items[0].data.TestValue);
    //这样可以用来显示数据源中的数据
      

  8.   

    对于Default.htm中的js脚本建议写到一个js文件中,会有很多好处:)
      

  9.   

    你的例子确实对我学习extjs有很大的帮助,特别是和服务器交互方面,太谢谢你了!
      

  10.   

    你的例子写的很好,是否可以用linq来获取后台数据库中的数据,然后给ToJson(),与ExtJs进行交互返回给客户端!最好能再提供一个实例来学习!