前言
近些天對于厚積薄發有深刻的了解,尤其是月末那兩天,很想再寫兩篇文章,保持每周一篇——每月至少四篇以上的文章。寫文章分兩種情況:一種情況是已經積累了許多經驗,寫起來輕松且得心應手,内容和系列文章容易把握,最典型的就是視訊監控的那系列文章,得以寫完是因為已經從事近半年相關的開發工作;另一種情況則是有方向但積累不足甚至無積累,邊學邊實踐,然後進行歸類和總結成系列,比如視訊監控第二個系列和本系列都屬于這種情況,如果時間稍微充足且過程較為順利,尚可勉強完成,反之則遙遙無期。由此感悟,下次寫系列文章還是得先多多積累,至少系列文章的内容在腹中已有一半以上,方可開動,否則可考慮繼續積累或者拆除幾篇相對獨立的文章單獨寫,不必冠以系列,我可不想蓋爛尾樓啊!
系列
推薦
正文
一、效果圖

二、代碼實作
2.1 用戶端
tablepage.aspx
代碼
ext.onready(function() {
ext.quicktips.init();
ext.form.field.prototype.msgtarget = 'side';
//搜尋id
var id = new numberfield('tbsearch');
id.style='text-align:center';//設定文本居中
var store = new ext.data.store({
proxy: new ext.data.httpproxy({
url: 'tablepage.aspx?method=search',
method: 'get'
}),
reader: new ext.data.jsonreader({
totalproperty: 'count',
root: 'result'
}, [
{ name: 'name' },
{ name: 'id' },
{ name: 'email' },
{ name: 'gender' }
]),
baseparams:{
id : '', //用于分頁時儲存搜尋條件
limit: 10 //每頁顯示數量
}
});
//加載資料
store.load();
//周遊資料
// store.each(function(record) {
// alert(record.get('name'));
// });
// for (var i = 0; i < store.getcount(); i++) {
// var record = store.getat(i);
// }
var datacolumns = new ext.grid.columnmodel({
columns: [
new ext.grid.rownumberer(), //顯示行号
{ header: "編 号", dataindex: 'id', sortable: true },
{ header: "名 稱", dataindex: 'name' },
{ header: "郵 箱", dataindex: 'email' },
{ header: "性 别", dataindex: 'gender' }
],
defaults: {
align: 'center'
var grid = new ext.grid.gridpanel({
store: store,
cm: datacolumns, //columns: [{}]
renderto: ext.getbody(),
//autoexpandcolumn: 1,
title: '<center style="curor:hand" onclick="window.location.reload();">搜尋與分頁</center>',
autoscroll: true,
autoheight: true,
border: true,
disableselection: true,
enablehdmenu:false,
frame: true,
loadmask: { msg: '正在加載資料,請稍侯……' }, //loadmask: true,
striperows: true, //隔行顯示不同顔色
// bodystyle:'width:99.8%',
// autowidth:true,
width: 800,
//設定單行選中模式
selmodel: new ext.grid.rowselectionmodel({ singleselect: false }),
//使列自動均分
viewconfig: {
forcefit: true
},
//搜尋條
tbar: new ext.toolbar({
items:[
new ext.form.label({ text:'編号: ' }),
id,{
iconcls: "add", text: '搜尋',
handler:function(){
//注意 sum 需要等資料加載完畢才能計算出來,不然始終為0
//alert(store.sum('id'));
grid.store.baseparams['id'] = id.getvalue();//防止分頁時丢失
grid.store.reload();
}
}
]
//底部分頁工具條
bbar: new ext.pagingtoolbar({
pagesize: 10,//此處應與limit一緻
store: store,
displayinfo: true,
emptymsg: '沒有記錄'
})
});
});
代碼說明:
實作了非常簡單搜尋和分頁,需要注意的是關于搜尋分頁時搜尋結果丢失的問題,這裡采取了兩個步驟:先是在ext.data.store的baseparams中聲明搜尋傳值變量,然後再點選搜尋按鈕時将搜尋條件存入到baseparams裡,這樣分頁時條件可以保持下來。
2.2 服務端
tablepage.aspx.cs
public override string search()
{
int start = -1;
int.tryparse(request.querystring["start"], out start);
int limit = -1;
int.tryparse(request.querystring["limit"], out limit);
string id = request.querystring["id"];
ilist<user> result = new list<user>();
if (string.isnullorempty(id))
result = getpage(convertolist(datasource.values), start, limit);
else
{
int uid;
if (int.tryparse(id, out uid))
{
if (datasource.containskey(uid))
result.add(datasource[uid]);
}
}
return new stringbuilder().append("{count:")
.append(1000)
.append(",result:")
.append(javascriptconvert.serializeobject(result))
.append('}')
.tostring();
}
#region 資料源
private static idictionary<int, user> datasource = new dictionary<int, user>();
static tablepage()
for (int i = 0; i < 1000; i++)
user user = builduser(i);
datasource.add(user.id, user);
private static ilist<user> getpage(ilist<user> data, int start, int limit)
int length = start + limit;
if (length > data.count)
length = data.count;
for (int i = start; i < length; i++)
result.add(data[i]);
return result;
private static ilist<user> convertolist(icollection<user> users)
user[] result = new user[users.count];
users.copyto(result, 0);
private static user builduser(int number)
return new user()
id = number,
email = string.format("test{0}163.com", number),
name = string.format("test{0}", number),
gender = new random().next(2)
};
class user
/// <summary>
/// 編号
/// </summary>
public int id { get; set; }
/// 郵箱
public string email { get; set; }
/// 名稱
public string name { get; set; }
/// 性别 0 女 1 男
public int gender { get; set; }
#endregion
代碼說明:
這裡仍然沒有連接配接資料庫,模拟資料與分頁查詢。
2.3 存儲過程
create procedure dbo.datapager
(
@startindex int = 0 ,
@limit int = 15,
@rowscount int = 0 output, -- 輸出記錄總行數
@sqlstring varchar(500)
)
as
set nocount on
select identity(int,1,1) as [newid],* into #tmp_zsflz1 from [tb_xjyjz] where 1=2
insert into #tmp_zsflz1 exec sp_executesql @sqlstring
--總行數
select @rowscount = count([newid]) from #tmp_zsflz
set @startindex = @startindex + 1
select * from #tmp_zsflz tz
where [newid] between @startindex and @startindex + @limit - 1
drop table #tmp_zsflz
return
go
雖然本文沒有用到,倒是實際中肯定要用到的,這裡寫一個樣例,僅供參考(注意:這裡是sql2000的例子)。
三、下載下傳
結束語
實在是想再補上點什麼,暫且如此,随後歸類再補上吧。
轉載:http://www.cnblogs.com/over140/archive/2009/11/30/1613130.html