`
lovnet
  • 浏览: 6880907 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

让Asp.NET的DataGrid可排序、可选择、可分页

阅读更多

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Asp.NETDataGrid可排序、可选择、可分页

DataGridAsp.NET中的一个重要的控件,经常我们都将DataGrid做成可分页的和可排序的,有时还需要加上选择功能。这些都是经常需要用到的方法,其实是比较简单的。

设计思路:

为了方便起见,我们连接SQL Server 2000NorthWind数据库的Orders表,从数据库里得到此表的数据视图。利用DataGridSortCommand事件实现排序用一个模板列加上CheckBox控件实现选择。可用DataGrid的属性生成器的“分页”选项或者自己修改HTML实现分页。

HTML

  • 添加一个DataGrid,命名为dgOrder
  • 添加了一个模板列,模板列里放一个名为CbCheckBox控件。此列用来实现选择
  • 为要排序的每个列加上排序表达式SortExpression
  • 利用列的DataFormatString来格式化列,象DataFormatString="{0:d}"显示日期格式。
  • 设置PageSize="15"每页显示15行数据,AllowPaging="True" 为允许分页

整个HTML页代码:

<form id="Form1" method="post" runat="server">

<asp:datagrid id="dgOrder" runat="server" Height="515px" Width="718px" AutoGenerateColumns="False" AllowSorting="True" CellPadding="4" BorderWidth="1px" BorderColor="#A0ABEB" PageSize="15" BorderStyle="Solid" BackColor="White" GridLines="Vertical" ForeColor="Black" AllowPaging="True" ShowFooter="True">

<SelectedItemStyle ForeColor="White" BackColor="Black"></SelectedItemStyle>

<AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle>

<HeaderStyle HorizontalAlign="Center" ForeColor="White" BorderColor="#<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="6876" unitname="C" w:st="on">6876C</chmetcnv>5" BackColor="#<chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="6876" unitname="C" w:st="on">6876C</chmetcnv>5"></HeaderStyle>

<FooterStyle ForeColor="White" BackColor="#<chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="6876" unitname="C" w:st="on">6876C</chmetcnv>5"></FooterStyle>

<Columns>

<asp:TemplateColumn>

<ItemTemplate>

<FONT face="宋体">

<asp:CheckBox id="Cb" runat="server"></asp:CheckBox></FONT>

</ItemTemplate>

</asp:TemplateColumn>

<asp:BoundColumn DataField="orderid" SortExpression="orderid" HeaderText="ID">

<HeaderStyle Width="180px"></HeaderStyle>

</asp:BoundColumn>

<asp:BoundColumn DataField="ShipCountry" SortExpression="ShipCountry" HeaderText="ShipCountry">

<HeaderStyle Width="180px"></HeaderStyle>

</asp:BoundColumn>

<asp:BoundColumn DataField="ShippedDate" SortExpression="ShippedDate" HeaderText="ShippedDate" DataFormatString="{0:d}">

<HeaderStyle Width="180px"></HeaderStyle>

</asp:BoundColumn>

<asp:BoundColumn DataField="Freight" SortExpression="Freight" HeaderText="Freight">

<HeaderStyle Width="180px"></HeaderStyle>

</asp:BoundColumn>

<asp:BoundColumn DataField="ShipAddress" SortExpression="ShipAddress" HeaderText="ShipAddress">

<HeaderStyle Width="480px"></HeaderStyle>

</asp:BoundColumn>

</Columns>

<PagerStyle HorizontalAlign="Center" ForeColor="Black" Position="TopAndBottom" BackColor="White" Mode="NumericPages"></PagerStyle>

</asp:datagrid>

</form>

后台类添加以下代码:

Imports System.Data.SqlClient

'得到数据视图,参数为要排序的列

Private Function GetDv(ByVal strSort As String) As DataView

'定义数据库连接

Dim dv As DataView

Dim CN As New SqlConnection()

Try

'初始化连接字符串

CN.ConnectionString = "data source=pmserver;initial catalog=Northwind;persist security info=False;user id=sa;Password=sa;"

CN.Open()

'NorthWind得到orders表的数据

Dim adp As SqlDataAdapter = New SqlDataAdapter("select * from orders", CN)

Dim ds As New DataSet()

adp.Fill(ds)

'得到数据视图

dv = ds.Tables(0).DefaultView

Catch ex As Exception

#If DEBUG Then

Session("Error") = ex.ToString()

Response.Redirect("../error.aspx") '跳转程序的公共错误处理页面

#End If

Finally

'关闭连接

CN.Close()

End Try

'排序

dv.Sort = strSort

Return dv

End Function

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If Not IsPostBack Then

ViewState("strSort") = "orderid"

dgOrder.DataSource = GetDv(ViewState("strSort").ToString())

dgOrder.DataBind()

End If

End Sub

'排序

Private Sub dgOrder_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles dgOrder.SortCommand

dgOrder.CurrentPageIndex = 0

'得到排序的列

ViewState("strSort") = e.SortExpression.ToString()

dgOrder.DataSource = GetDv(ViewState("strSort").ToString())

dgOrder.DataBind()

End Sub

'分页

Private Sub dgOrder_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles dgOrder.PageIndexChanged

'得到分页的页号

dgOrder.CurrentPageIndex = e.NewPageIndex

dgOrder.DataSource = GetDv(ViewState("strSort").ToString())

dgOrder.DataBind()

End Sub

运行结果如下图所示:(点击列标头可以排序)

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype>

为了知道用户选择的是哪些记录,我们可以利用DataGridItemFindControl得到CheckBox的值,我们来添加一个按钮,再写如下代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim item As DataGridItem

Dim StrScript As String

StrScript = "<script language=javascript>alert('"

'循环表格的项,FindControl

For Each item In Me.dgOrder.Items

If CType(item.FindControl("cb"), System.Web.UI.WebControls.CheckBox).Checked Then

Try

StrScript += item.Cells(1).Text & Space(2)

Catch ex As Exception

End Try

End If

Next

StrScript += "被选择!')</script>"

RegisterClientScriptBlock("系统消息", StrScript)

End Sub

上面的代码RegisterClientScriptBlock添加Java Script脚本弹出对话框。(其实Vb Script的对话框比Java Script的对话框多更多的显示和控制方式,但Netscape的浏览器不支持,大家可根据相应的项目在程序里选择用哪种脚本)。

总结:

DataGrid是我们常用的Web 控件,有时我们还可以和DataList混合使用,通过修改HTML页,可以达到好的页面效果。上面只是一个例子,为了便于清楚整个过程,我把数据访问部分(SQL)写到了页面中。在软件开发中,我们一般把访问数据的部分写成数据层,页面调用数据层得到数据,这样逻辑清晰,修改和维护都很方便。

‘***************************************************************

‘Author: 李洪根

‘MAIL: lihonggen0@gci-corp.com

专栏: http://www.csdn.net/develop/author/netauthor/lihonggen0/

如需引用,请指明出处! CSDN论坛VB版欢迎您!

‘***************************************************************

分享到:
评论

相关推荐

    自定义asp.net中DataGrid的一个分页控件

    在ASP.NET开发中,DataGrid控件是一种常用的用于展示数据集合的控件,它提供了诸如排序、分组、筛选等功能。然而,对于大型数据集,为了提高用户体验,分页功能是必不可少的。本教程将详细介绍如何在ASP.NET环境中,...

    asp.net 分页控件大全

    1. GridView:GridView是最常用的ASP.NET控件之一,它可以显示来自数据源的数据,并支持分页、排序和编辑等功能。通过设置其`AllowPaging`属性为`true`,即可启用分页功能,同时可通过`PageSize`属性来设定每页显示...

    ASP.net中大结果集的分页

    本篇文章将详细介绍在ASP.NET中处理大结果集分页的方法及其背后的原理,旨在为开发者提供一种优化现有方法的新思路,并提供一个可供进一步测试与开发的基础应用。 #### 为什么需要分页 在Web应用程序中,特别是...

    ASP.NET常见问题集锦.zip

    ASP.NET中实现DataGrid数据排序.doc asp.net中的弹出对话框.doc ASP.NET中自定义控件的创建和使用.doc ASP.NET实现用户在线检测的类源码.txt ASP.NET常见问题集锦.zip ASP.NET弹出式日历选择控件的实现.doc ...

    ASP.NET分页技巧

    ASP.NET中的分页技巧是网页开发中的重要技术,特别是在处理大量数据时,为了提高用户体验,分页成为必不可少的功能。在ASP.NET中,DataGrid控件是实现分页的一个强大工具,它提供了简单易用的配置选项,使得开发者...

    ASP.NET分页控件

    在ASP.NET中,分页通常用于GridView、ListView、DataGrid等数据绑定控件,使得用户可以逐页浏览数据,而不是一次性加载所有记录。下面将详细阐述ASP.NET分页控件的相关知识点。 1. **基本概念** - **控件类型**:...

    ASP.NET应用:DataGrid使用最佳实践视频

    3. **分页和排序**:配置DataGrid的PageSize属性实现分页,使用SortExpression设置可排序列,以及响应用户点击列头进行排序。 4. **事件处理**:理解如ItemCreated、ItemDataBound和RowEditing等关键事件,以及如何...

    Easy Ui datagrid分页

    在ASP.NET开发中,Easy UI Datagrid是一款广泛使用的前端组件,它基于jQuery和CSS3,提供了丰富的表格展示功能,包括数据加载、排序、过滤、分页等。本篇将深入探讨Easy UI Datagrid的分页功能及其在ASP.NET中的应用...

    留言板 asp.net + access

    4. 数据展示:通过DataGrid或Repeater控件显示数据库中的留言,可以实现分页和排序功能。 5. 增删改查操作:为每条留言提供删除和编辑链接,实现后台对留言的管理功能。 四、安全性与优化 1. 输入验证:使用ASP.NET...

    [其他类别]适合初学者的datagrid的操作_dg(ASP.NET源码).rar

    【标题】中的“[其他类别]适合初学者的datagrid的操作_dg(ASP.NET源码).rar”指的是一款适用于初学者的ASP.NET应用程序,它涉及到数据网格控件(DataGrid)的操作。DataGrid是ASP.NET中用于显示和操作数据库数据的...

    asp.net专家疑难解答200问

    如何在ASP.NET中做一个日期选择器 198.如何在弹出对话框的同时保持页面的显示 199.如何点击按钮弹出新页面,输入数据后返回并且不刷新页面 第11章 文件操作 200.如何读取、修改文本文件 201....

    WebGrid ASP.NET DataGrid Control-开源

    总之,WebGrid ASP.NET DataGrid Control是一个功能强大、易用的开源数据网格解决方案,它通过无代码数据绑定和丰富的属性集,为开发者提供了高效的数据展示和管理工具。结合开源社区的支持,WebGrid成为了ASP.NET...

    Data Source Controls in ASP.NET 2.0

    然而,无论是传统ASP还是ASP.NET 1.x,都需要编写代码来实现分页、排序、编辑和行选择功能。在ASP.NET 2.0中,这些代码可以显著减少,从而创建一个带有完整分页、排序和编辑功能的数据填充网格。 SqlDataSource是...

    asp.net技术内幕(1)

    11.3.2 对DataGrid使用样式 11.3.3 对DataGrid控件中的列进行排序 11.3.4 对DataGrid中的记录进行分页 11.3.5 选择DataGrid控件中的行 11.3.6 编辑DataGrid控件中的条目 11.3.7 使用模板...

    ASP.NET应用视频教程

    本视频教程专注于ASP.NET中的DataGrid控件,它是ASP.NET Web Forms中用于展示数据的常用工具,尤其适用于创建动态的数据网格。 DataGrid控件是ASP.NET Web Forms中的一种数据绑定控件,它允许开发者在网页上以表格...

    Asp.net常用控件名简写对照表

    8. **DataGrid(dg)**: 数据网格控件用于显示数据表格,支持排序、分页和编辑功能。例如,`&lt;asp:DataGrid ID="dgUsers" runat="server" AutoGenerateColumns="True" DataSourceID="dsUsers" /&gt;`。 9. **DataList...

    .net下功能強大的Datagrid控件

    在.NET框架中,Datagrid控件是一个非常重要的组件,尤其在ASP.NET环境下,它被广泛用于数据展示和交互。这个控件提供了丰富的功能,能够帮助开发者轻松地在网页上创建表格,显示数据库中的数据,并允许用户进行编辑...

    ASP.Net程序设计基础篇

    常见的数据绑定技术有DataGrid、Repeater和ListView,它们可以动态显示数据,并支持排序、分页和筛选。 6. **ASP.NET MVC和Web Forms** ASP.NET有两种主要的开发模式:Web Forms和MVC(Model-View-Controller)。...

Global site tag (gtag.js) - Google Analytics