Asp.NET的DataGrid排序,選擇和分頁

來源:互聯網
上載者:User
asp.net|datagrid|分頁|排序

  

DataGrid是Asp.NET中的一個重要的控制項,經常我們都將DataGrid做成可分頁的和可排序的,有時還需要加上選擇功能。這些都是經常需要用到的方法,其實是比較簡單的。

  設計思路:

  為了方便起見,我們串連SQL Server 2000的NorthWind資料庫的Orders表,從資料庫裡得到此表的資料檢視。利用DataGrid的SortCommand事件實現排序。用一個模板列加上CheckBox控制項實現選擇。可用DataGrid的屬性產生器的“分頁”選項或者自己修改HTML實現分頁。

  HTML:

  添加一個DataGrid,命名為dgOrder。

  添加了一個模板列,模板列裡放一個名為Cb的CheckBox控制項。此列用來實現選擇

  為要排序的每個列加上排序運算式SortExpression。

  利用列的DataFormatString來格式化列,象DataFormatString="{0:d}"顯示日期格式。

  設定PageSize="15"每頁顯示15行資料,AllowPaging="True" 為允許分頁 。

  ield="orderid" SortExpression="orderid" HeaderText="ID">  

  後台類添加以下代碼:


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

  運行結果如下圖所示:(點擊列標題可以排序)



  為了知道使用者選擇的是哪些記錄,我們可以利用DataGridItem的FindControl得到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 = " "

  RegisterClientScriptBlock("系統訊息", StrScript)

  End Sub

  上面的代碼RegisterClientScriptBlock添加Java Script指令碼彈出對話方塊。(其實Vb Script的對話方塊比Java Script的對話方塊多更多的顯示和控制方式,但Netscape的瀏覽器不支援,大家可根據相應的項目在程式裡選擇用哪種指令碼)。

  

  總結:

  DataGrid是我們常用的Web 控制項,有時我們還可以和DataList混合使用,通過修改HTML頁,可以達到好的頁面效果。上面只是一個例子,為了便於清楚整個過程,我把資料訪問部分(SQL)寫到了頁面中。在軟體開發中,我們一般把訪問資料的部分寫成資料層,頁面調用資料層得到資料,這樣邏輯清晰,修改和維護都很方便。

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。