使用RedControls控件RadAjaxPanel、AjaxLoadingPanel实现GridView无刷新翻页和排序
一、本文中涉及到的控件
1、标准控件:GridView
2、RadControls控件:RadAjaxPanel和AjaxLoadingPanel
二、页面布局
建立ASP.NET应用程序或网站,在aspx页面分别防置一个RadAjaxPanel、AjaxLoadingPanel和GridView控件(将GridView嵌套在RadAjaxPanel控件内部)。
然后将RadAjaxPanel的LoadingPanelID属性设置为AjaxLoadingPanel控件的ID值便OK。
下面只需要做好后台的程序工作,一个使用RadControls控件的Ajax功能就完成了。
三、编写程序构造数据及实现排序和分页功能
1、创建数据
1 private ICollection CreateDataSource()
2 {
3 DataTable dt = new DataTable();
4 DataRow dr;
5 Random Rand_Num = new Random();
6
7 dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
8 dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
9 dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
10
11 for (int i = 0; i < 50; i++)
12 {
13 dr = dt.NewRow();
14
15 dr[0] = i;
16 dr[1] = "Item " + i.ToString();
17 dr[2] = 1.23 * Rand_Num.Next(1, 15);
18
19 dt.Rows.Add(dr);
20 }
21
22 DataView dv = new DataView(dt);
23 if (SortExpression != string.Empty && SortExpression != null)
24 {
25 dv.Sort = SortExpression + SortDirection;
26 SwapSortDirection();
27 }
28
29 return dv;
30 }
2 {
3 DataTable dt = new DataTable();
4 DataRow dr;
5 Random Rand_Num = new Random();
6
7 dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
8 dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
9 dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
10
11 for (int i = 0; i < 50; i++)
12 {
13 dr = dt.NewRow();
14
15 dr[0] = i;
16 dr[1] = "Item " + i.ToString();
17 dr[2] = 1.23 * Rand_Num.Next(1, 15);
18
19 dt.Rows.Add(dr);
20 }
21
22 DataView dv = new DataView(dt);
23 if (SortExpression != string.Empty && SortExpression != null)
24 {
25 dv.Sort = SortExpression + SortDirection;
26 SwapSortDirection();
27 }
28
29 return dv;
30 }
2、绑定数据
1 string SortExpression;
2
3 protected void Page_Load(object sender, EventArgs e)
4 {
5 if (!IsPostBack)
6 {
7 if (SortExpression == "" || SortExpression == null)
8 {
9 SortExpression = "IntegerValue";
10 }
11 GridView1.DataSource = CreateDataSource();
12 GridView1.DataBind();
13 }
14 }
2
3 protected void Page_Load(object sender, EventArgs e)
4 {
5 if (!IsPostBack)
6 {
7 if (SortExpression == "" || SortExpression == null)
8 {
9 SortExpression = "IntegerValue";
10 }
11 GridView1.DataSource = CreateDataSource();
12 GridView1.DataBind();
13 }
14 }
3、编写排序方式属性
1 private string SortDirection
2 {
3 get
4 {
5 if (ViewState["SortDirection"] != null)
6 {
7 return (string)ViewState["SortDirection"];
8 }
9 else
10 {
11 return string.Empty;
12 }
13 }
14 set
15 {
16 ViewState["SortDirection"] = value;
17 }
18 }
19
20 private void SwapSortDirection()
21 {
22 if (SortDirection == string.Empty || SortDirection == " ASC")
23 {
24 SortDirection = " DESC";
25 }
26 else
27 {
28 SortDirection = " ASC";
29 }
30 }
2 {
3 get
4 {
5 if (ViewState["SortDirection"] != null)
6 {
7 return (string)ViewState["SortDirection"];
8 }
9 else
10 {
11 return string.Empty;
12 }
13 }
14 set
15 {
16 ViewState["SortDirection"] = value;
17 }
18 }
19
20 private void SwapSortDirection()
21 {
22 if (SortDirection == string.Empty || SortDirection == " ASC")
23 {
24 SortDirection = " DESC";
25 }
26 else
27 {
28 SortDirection = " ASC";
29 }
30 }
4、编写排序功能代码
1 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
2 {
3 Thread.Sleep(2000);
4 GridView gv = sender as GridView;
5 SortExpression = e.SortExpression;
6 gv.DataSource = CreateDataSource();
7 gv.DataBind();
8 }
2 {
3 Thread.Sleep(2000);
4 GridView gv = sender as GridView;
5 SortExpression = e.SortExpression;
6 gv.DataSource = CreateDataSource();
7 gv.DataBind();
8 }
5、编写分页功能代码
1 protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
2 {
3 Thread.Sleep(2000);
4 this.GridView1.PageIndex = e.NewPageIndex;
5 GridView1.DataSource = CreateDataSource();
6 GridView1.DataBind();
7 }
2 {
3 Thread.Sleep(2000);
4 this.GridView1.PageIndex = e.NewPageIndex;
5 GridView1.DataSource = CreateDataSource();
6 GridView1.DataBind();
7 }
四、类似控件
RadControls系列控件的RadAjaxPanel和AjaxLoadingPanel主要是用来实现局部刷新及Loading状态,提高用户体验的目的。除此之外我们也可以使用别的技术和控件来实现,ASP.NET AJAX所提供的UpdatePanel和UpdateProgress便是。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述