最近一直在学extjs的东东,一直有个问题得不到解决,请指点一二,谢谢 我的环境是sql2000+vs2005+ext2.0,其实开发东西的时候几乎都是从数据库里面提取数据,然后在ext2.0设计的界面上显示出来,我看了不少这方面 的资料,不少是vs2008环境下的,vs2005下的不多,能详细把这个功能实现的流程详细的说一下吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ext通过异步请求一个aspx,ashx,或是web service来取得数据,服务端返回一个json.然后显示客户端接收并显示. 其实哪来什么vs2008,vs2005(这只是开发工具罢了),他们之间也就是dotnetframework(2。0,3.0)的版本,在你说的这方面使用,你完全可以参考网上的文章来弄,个别使用了3.0,3.5采用的新特性,你也可以在理解其语句意思利用2.0来实现,没什么太大的难度。有问题可以随时提嘛,论坛强人多 很多人用vs2008+dotnetframework2.0开发,别看标题写着vs2008利用extjs开发,其实它里面很多也就用到个lamda表达式,这个在2.0实现同等效果不是没办法只是稍微麻烦点,其他的特性我看要么就都没用,要么就有刚才说的lamda,何况这个后台和extjs本身没太大关联。 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(',') + "]}"); }} 在Default.htm中.我已经得到了这个后台返回的数据源(store ),我可以对他进行显示.上例中我只是把它绑定到了一个grid上. 对于DefaultHandler.ashx中,我没有去数据库中查询,只是简单构造了一个datatable,实际开发中你可能要在这里访问你的数据库来拿数据而在把datatable转成json的时候可以借助一些其它的组件来实现,如Newtonsoft.Json等.. alert(store.data.items[0].data.TestName);alert(store.data.items[0].data.TestValue);//这样可以用来显示数据源中的数据 对于Default.htm中的js脚本建议写到一个js文件中,会有很多好处:) 你的例子确实对我学习extjs有很大的帮助,特别是和服务器交互方面,太谢谢你了! 你的例子写的很好,是否可以用linq来获取后台数据库中的数据,然后给ToJson(),与ExtJs进行交互返回给客户端!最好能再提供一个实例来学习! 颜色色板 急~~~~关于在控件里page_load 和 IsPostBack的问题,急!!!~~~~~ 动态控件JS 页面跳转url值丢失 请教.实现交友网站的"最近访客"这功能的思路. 分页的DataGrid点击刷新出现问题 提交的表单,通过后台认可后再在前台呈现,看我的思路对不??! 求救,DataGrid模版列中按钮的事件问题。 溢出错误-oracle和.net 逢一进十方法 如下 真高兴!大家都来捧场阿,来者有分。 如何实现跨页传值? 控制gridview的列宽,十万火急!
<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(',') + "]}");
}
}
我可以对他进行显示.
上例中我只是把它绑定到了一个grid上.
实际开发中你可能要在这里访问你的数据库来拿数据
而在把datatable转成json的时候可以借助一些其它的组件来实现,如Newtonsoft.Json等..
alert(store.data.items[0].data.TestValue);
//这样可以用来显示数据源中的数据