using System;
using System.Collections.Generic;
using System.Linq;
using Telerik.Web.UI;
using System.Web.Services;
using System.Drawing;
using System.Reflection;
public partial class RadGridAjaxSample : System.Web.UI.Page
{
//模擬資料物件
public class SimMemberInfo
{
public string UserNo; //會員編號
public string UserName; //會員名稱
public DateTime RegDate; //註冊日期
public int Points; //累積點數
}
//查詢結果,包含資料物件集合(已分頁)以及總筆數
public class RadGridQueryResult<T>
{
public int TotalCount;
public List<T> Items;
}
static List<SimMemberInfo> _SimuDataStore = null;
//模擬對資料庫進行關鍵字查詢,並依要求分頁及排序
public static RadGridQueryResult<SimMemberInfo>
QuerySimuData(string keywd, int stPos, int count, string sortBy)
{
if (_SimuDataStore == null)
{
Random rnd = new Random();
//借用具名顏色名稱來產生隨機資料
string[] colorNames =typeof(Color)
.GetProperties(BindingFlags.Static | BindingFlags.Public)
.Select(o => o.Name).ToArray();
_SimuDataStore =
colorNames
.Select(cn => new SimMemberInfo()
{
UserNo = string.Format("C{0:00000}", rnd.Next(99999)),
UserName = cn,
RegDate = DateTime.Today.AddDays(- rnd.Next(1000)),
Points = rnd.Next(9999)
}).ToList();
}
//指定關鍵字時,使用Contains()對UserName進行比對
var q = _SimuDataStore.Where(o =>
string.IsNullOrEmpty(keywd) || o.UserName.Contains(keywd));
if (!string.IsNullOrEmpty(sortBy))
{
//宣告一個函數可傳回SimMemberInfo之指定屬性值用於依動態欄位排序
Func<SimMemberInfo, string, string> GetColString =
(o, c) =>
{
switch(c)
{
case "UserNo": return o.UserNo;
case "UserName": return o.UserName;
case "RegDate": return o.RegDate.ToString("yyyyMMdd");
case "Points": return o.Points.ToString();
default: throw new ArgumentException();
}
};
//sortBy格式為ColName ASC或ColName DESC
string[] p = sortBy.Split(' ');
if (p[1] == "ASC")
q = q.OrderBy(o => GetColString(o, p[0]));
else
q = q.OrderByDescending(o => GetColString(o, p[0]));
}
return new RadGridQueryResult<SimMemberInfo>()
{
TotalCount = q.Count(),
Items = q.Skip(stPos).Take(count).ToList()
};
}
[WebMethod()]
public static Dictionary<string, object> GetData(
//前四個參數是RadGrid制式要求,分別為: 起始筆數、每頁筆數、排序設定、篩選設定
int startRowIndex, int maximumRows, List<GridSortExpression> sortExpression,
List<GridFilterExpression> filterExpression,
//若前端用args.get_methodArguments()加入額外參數,在此要宣告參數接收
string keywd)
{
Dictionary<string, object> data = new Dictionary<string, object>();
//取得排序參數(只實做支援單欄排序)
GridSortExpression gse = sortExpression.FirstOrDefault();
string sortBy = gse != null ?
string.Format("{0} {1}", gse.FieldName, gse.SortOrderAsString()) : "";
//模擬呼叫資料庫進行查詢(傳入關鍵字、分頁參數及排序欄位)
var res = QuerySimuData(keywd, startRowIndex, maximumRows, sortBy);
data.Add("Data", res.Items);
data.Add("Count", res.TotalCount);
return data;
}
protected void Page_Load(object sender, EventArgs e)
{
}
}