Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Scott Mitchell
Bu öğreticide, sayfalanmış, filtrelenebilir bir kılavuza sahip bir kullanıcı arabirimi oluşturacağız. Özellikle, kullanıcı arabirimimiz sonuçları kullanıcı adının başlangıç harfine göre filtrelemek için bir dizi LinkButton'tan ve eşleşen kullanıcıları göstermek için bir GridView denetiminden oluşur. GridView'da tüm kullanıcı hesaplarını listeleyerek başlayacağız. Ardından, 3. Adımda LinkButtons filtresini ekleyeceğiz. 4. Adım, filtrelenen sonuçları sayfalama işlemini gösterir. Adım 2 ile 4 arasında inşa edilen arabirim, belirli bir kullanıcı hesabı için yönetim görevlerini gerçekleştirmek üzere sonraki öğreticilerde kullanılacaktır.
Giriş
Kullanıcılara Rol Atama öğreticisinde, bir yöneticinin kullanıcı seçmesi ve rollerini yönetmesi için bir temel arabirim oluşturduk. Özellikle, arabirim yöneticiye tüm kullanıcıların bir açılan listesini sundu. Böyle bir arabirim, bir düzine veya daha fazla kullanıcı hesabı olduğunda uygundur, ancak yüzlerce veya binlerce hesabı olan siteler için uygun değildir. Sayfalanmış, filtrelenebilir bir kılavuz, büyük kullanıcı tabanlarına sahip web siteleri için daha uygun bir kullanıcı arabirimidir.
Bu öğreticide böyle bir kullanıcı arabirimi oluşturacağız. Özellikle, kullanıcı arabirimimiz sonuçları kullanıcı adının başlangıç harfine göre filtrelemek için bir dizi LinkButton'tan ve eşleşen kullanıcıları göstermek için bir GridView denetiminden oluşur. GridView'da tüm kullanıcı hesaplarını listeleyerek başlayacağız. Ardından, 3. Adımda LinkButtons filtresini ekleyeceğiz. 4. Adım, filtrelenen sonuçları sayfalama işlemini gösterir. Adım 2 ile 4 arasında inşa edilen arabirim, belirli bir kullanıcı hesabı için yönetim görevlerini gerçekleştirmek üzere sonraki öğreticilerde kullanılacaktır.
Haydi başlayalım!
1. Adım: Yeni ASP.NET Sayfaları Ekleme
Bu öğreticide ve sonraki ikisinde yönetimle ilgili çeşitli işlevleri ve özellikleri inceleyeceğiz. Bu öğreticilerde incelenen konuları uygulamak için bir dizi ASP.NET sayfaya ihtiyacımız olacak. Şimdi bu sayfaları oluşturalım ve site haritasını güncelleştirelim.
Projede adlı Administration
yeni bir klasör oluşturarak başlayın. Ardından klasöre iki yeni ASP.NET sayfası ekleyin ve her sayfayı ana sayfaya Site.master
bağlayın. Sayfaları adlandırın:
ManageUsers.aspx
UserInformation.aspx
Ayrıca web sitesinin kök dizinine iki sayfa ekleyin: ChangePassword.aspx
ve RecoverPassword.aspx
.
Bu dört sayfada, bu noktada, ana sayfanın ContentPlaceHolders'larının her biri için bir tane olmak üzere iki İçerik denetimi olmalıdır: MainContent
ve LoginContent
.
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="LoginContent" Runat="Server">
</asp:Content>
Bu sayfalar için ContentPlaceHolder için ana sayfanın varsayılan işaretlemesini LoginContent
göstermek istiyoruz. Bu nedenle, İçerik denetimi için bildirim temelli işaretlemeyi Content2
kaldırın. Bunu yaptıktan sonra sayfaların işaretlemesi yalnızca bir İçerik denetimi içermelidir.
Klasördeki Administration
ASP.NET sayfaları yalnızca yönetici kullanıcılara yöneliktir.
Rol Oluşturma ve Yönetme öğreticisinde sisteme bir Yöneticiler rolü ekledik; bu iki sayfaya erişimi bu rolle kısıtlayın. Bunu yapmak için klasöre Administration
bir Web.config
dosya ekleyin ve öğesini Yöneticiler rolündeki kullanıcıları kabul edecek ve diğerlerini reddedecek şekilde yapılandırın<authorization>
.
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Administrators" />
<deny users="*"/>
</authorization>
</system.web>
</configuration>
Bu noktada projenizin Çözüm Gezgini Şekil 1'de gösterilen ekran görüntüsüne benzer olmalıdır.
Şekil 1: Web Sitesine Dört Yeni Sayfa ve Bir Web.config
Dosya Eklendi (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Son olarak, sayfaya bir giriş eklemek için site haritasını (Web.sitemap
) güncelleştirin ManageUsers.aspx
. Roller öğreticileri için eklediğimizden sonra <siteMapNode>
aşağıdaki XML'yi ekleyin.
<siteMapNode title="User Administration" url="~/Administration/ManageUsers.aspx"/>
Site haritası güncelleştirildiyse, siteyi bir tarayıcı üzerinden ziyaret edin. Şekil 2'de gösterildiği gibi, sol taraftaki gezinti artık Yönetim öğreticileri için öğeleri içerir.
Şekil 2: Site Haritası Kullanıcı Yönetimi Başlıklı Bir Düğüm Içerir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
2. Adım: GridView'da Tüm Kullanıcı Hesaplarını Listeleme
Bu öğreticinin son hedefimiz, yöneticinin yönetecek bir kullanıcı hesabı seçebileceği sayfalanmış, filtrelenebilir bir kılavuz oluşturmaktır. GridView'da tüm kullanıcıları listeleyerek başlayalım. Bu işlem tamamlandıktan sonra filtreleme ve sayfalama arabirimlerini ve işlevselliğini ekleyeceğiz.
Klasördeki sayfayı ManageUsers.aspx
açın ve bir GridView ekleyin ve bunu ID
UserAccounts
Bir dakika içinde olarak ayarlayarak, sınıfın yöntemini kullanarak Membership
kullanıcı hesapları kümesini GridView'a GetAllUsers
bağlamak için kod yazacağız.Administration
Önceki öğreticilerde açıklandığı gibi, GetAllUsers
yöntemi nesne MembershipUserCollection
koleksiyonu MembershipUser
olan bir nesnesi döndürür. Koleksiyondaki her MembershipUser
bir özellik , Email
, IsApproved
ve benzeri UserName
özellikleri içerir.
GridView'da istenen kullanıcı hesabı bilgilerini görüntülemek için GridView özelliğini AutoGenerateColumns
False olarak ayarlayın ve , ve özellikleri için UserName
BoundFields ile , IsOnline
Email
IsLockedOut
ve Comment
özellikleri için IsApproved
CheckBoxFields ekleyin. Bu yapılandırma, denetimin bildirim temelli işaretlemesi veya Alanlar iletişim kutusu aracılığıyla uygulanabilir. Şekil 3'de Alanları otomatik oluştur onay kutusu işaretlenmemiş ve BoundFields ve CheckBoxFields eklenip yapılandırıldıktan sonra Alanlar iletişim kutusunun ekran görüntüsü gösterilmektedir.
Şekil 3: GridView'a Üç BoundField ve Üç CheckBoxField ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
GridView'unuzu yapılandırdıktan sonra bildirim temelli işaretlemesinin aşağıdakine benzediğinden emin olun:
<asp:GridView ID="UserAccounts" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="UserName" HeaderText="UserName" />
<asp:BoundField DataField="Email" HeaderText="Email" />
<asp:CheckBoxField DataField="IsApproved" HeaderText="Approved?" />
<asp:CheckBoxField DataField="IsLockedOut" HeaderText="Locked Out?" />
<asp:CheckBoxField DataField="IsOnline" HeaderText="Online?" />
<asp:BoundField DataField="Comment" HeaderText="Comment" />
</Columns>
</asp:GridView>
Ardından, kullanıcı hesaplarını GridView'a bağlayan kod yazmamız gerekir. Bu görevi gerçekleştirmek için adlı BindUserAccounts
bir yöntem oluşturun ve ardından ilk sayfa ziyaretinde Page_Load
olay işleyicisinden çağırın.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
BindUserAccounts()
End If
End Sub
Private Sub BindUserAccounts()
UserAccounts.DataSource = Membership.GetAllUsers()
UserAccounts.DataBind()
End Sub
Sayfayı bir tarayıcı üzerinden test etmek için biraz zaman ayırın. Şekil 4'te gösterildiği gibi GridView sistemdeki UserAccounts
tüm kullanıcılar için kullanıcı adı, e-posta adresi ve diğer ilgili hesap bilgilerini listeler.
Şekil 4: Kullanıcı Hesapları GridView'da Listelenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
3. Adım: Sonuçları Kullanıcı Adının İlk Harfine Göre Filtreleme
UserAccounts
Şu anda GridView tüm kullanıcı hesaplarını gösterir. Yüzlerce veya binlerce kullanıcı hesabı olan web siteleri için, kullanıcının görüntülenen hesapları hızla ayrıştırabilmesi zorunludur. Bu, sayfaya LinkButton filtrelemesi eklenerek gerçekleştirilebilir. Şimdi sayfaya 27 LinkButton ekleyelim: hepsi ve alfabenin her harfi için bir LinkButton başlığı. Bir ziyaretçi Tüm BağlantıDüğmesini tıklatırsa GridView tüm kullanıcıları gösterir. Belirli bir harfe tıklarsa, yalnızca kullanıcı adı seçili harfle başlayan kullanıcılar görüntülenir.
İlk görevimiz 27 LinkButton denetimi eklemektir. Seçeneklerden biri 27 LinkButton'ı bildirim temelli olarak birer birer oluşturmaktır. Daha esnek bir yaklaşım, Bir LinkButton'ı işleyen ve ardından filtreleme seçeneklerini Yineleyici'ye dizi olarak bağlayan bir String
ile ItemTemplate
Repeater denetimi kullanmaktır.
GridView'un üst UserAccounts
kısmındaki sayfaya repeater denetimi ekleyerek başlayın. Repeater özelliğini ID
FilteringUI
Repeater'ın şablonlarını yapılandır olarak ayarlayın; böylece ItemTemplate
ve CommandName
özellikleri geçerli dizi öğesine bağlı olan Text
bir LinkButton işler. Kullanıcılara Rol Atama öğreticisinde gördüğümüz gibi, bu işlem veri bağlama söz dizimi kullanılarak Container.DataItem
gerçekleştirilebilir. Her bağlantı arasında dikey bir çizgi görüntülemek için Yineleyici'yi SeparatorTemplate
kullanın.
<asp:Repeater ID="FilteringUI" runat="server">
<ItemTemplate>
<asp:LinkButton runat="server" ID="lnkFilter"
Text='<%# Container.DataItem %>'
CommandName='<%# Container.DataItem %>'></asp:LinkButton>
</ItemTemplate>
<SeparatorTemplate>|</SeparatorTemplate>
</asp:Repeater>
Bu Repeater'ı istenen filtreleme seçenekleriyle doldurmak için adlı BindFilteringUI
bir yöntem oluşturun. İlk sayfa yüklemesinde Page_Load
olay işleyicisinden bu yöntemi çağırın.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
BindUserAccounts()
BindFilteringUI()
End If
End Sub
Private Sub BindFilteringUI()
Dim filterOptions() As String = {"All", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
FilteringUI.DataSource = filterOptions
FilteringUI.DataBind()
End Sub
Bu yöntem, dizideki String
filterOptions
öğeler olarak filtreleme seçeneklerini belirtir Yineleyici dizideki her öğe için, dizi öğesinin değerine atanmış ve CommandName
özellikleriyle Text
bir LinkButton işler.
Şekil 5'te ManageUsers.aspx
, bir tarayıcı üzerinden görüntülendiğinde sayfa gösterilir.
Şekil 5: Repeater Lists 27 Filtering LinkButtons (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Not
Kullanıcı adları, sayılar ve noktalama işaretleri de dahil olmak üzere herhangi bir karakterle başlayabilir. Bu hesapları görüntülemek için yöneticinin Tüm BağlantıDüğmesi seçeneğini kullanması gerekir. Alternatif olarak, bir sayı ile başlayan tüm kullanıcı hesaplarını döndürmek için bir LinkButton ekleyebilirsiniz. Bunu okuyucu için bir alıştırma olarak bırakıyorum.
LinkButtons filtrelemelerinden herhangi birine tıklanması geri göndermeye neden olur ve Repeater'ın ItemCommand
olayını tetikler, ancak sonuçları filtrelemek için henüz herhangi bir kod yazmadığımız için kılavuzda bir değişiklik olmaz. sınıfı, Membership
kullanıcı adı belirtilen arama FindUsersByName
deseni ile eşleşen kullanıcı hesaplarını döndüren bir yöntem içerir. Yalnızca kullanıcı adları tıklanan filtrelenmiş LinkButton tarafından belirtilen CommandName
harfle başlayan kullanıcı hesaplarını almak için bu yöntemi kullanabiliriz.
İlk olarak sayfanın arka planda kod sınıfını güncelleştirerek ManageUser.aspx
Bu özellik adlı UsernameToMatch
bir özellik içermesi ve kullanıcı adı filtresi dizesini geri göndermeler arasında kalıcı hale döndürmesini sağlayın:
Private Property UsernameToMatch() As String
Get
Dim o As Object = ViewState("UsernameToMatch")
If o Is Nothing Then
Return String.Empty
Else
Return o.ToString()
End If
End Get
Set(ByVal Value As String)
ViewState("UsernameToMatch") = Value
End Set
End Property
özelliği, UsernameToMatch
'UsernameToMatch' anahtarını kullanarak koleksiyona ViewState
atandığı değerini depolar. Bu özelliğin değeri okunduğunda, koleksiyonda ViewState
bir değer olup olmadığını denetler; yoksa, boş bir dize olan varsayılan değeri döndürür.
UsernameToMatch
özelliğinde yapılan tüm değişikliklerin geri göndermeler arasında kalıcı olması için durumu görüntülemek için bir değeri kalıcı hale getiren ortak bir desen sergiler. Bu düzen hakkında daha fazla bilgi için bkz . Durumu ASP.NET Görüntülemeyi Anlama.
Ardından yöntemini, çağırmak yerine , öğesini çağırıp Membership.GetAllUsers
Membership.FindUsersByName
SQL joker karakteriyle eklenen özelliğin UsernameToMatch
değerini geçirerek güncelleştirinBindUserAccounts
.
Private Sub BindUserAccounts()
UserAccounts.DataSource = Membership.FindUsersByName(Me.UsernameToMatch &"%")
UserAccounts.DataBind()
End Sub
Yalnızca kullanıcı adı A harfiyle başlayan kullanıcıları görüntülemek için, özelliğini A olarak ayarlayın UsernameToMatch
ve ardından Bu çağrısı BindUserAccounts
, kullanıcı adı A ile başlayan tüm kullanıcıları döndüren çağrısına neden Membership.FindUsersByName("A%")
olur. Benzer şekilde, tüm kullanıcıları döndürmek için özelliğine boş bir dize atayın UsernameToMatch
, böylece yöntemin BindUserAccounts
çağıracağı Membership.FindUsersByName("%")
şekilde tüm kullanıcı hesaplarını döndürür.
Repeater'ın ItemCommand
olayı için bir olay işleyicisi oluşturun. Bu olay, LinkButtons filtrelerinden birine tıklandığında oluşturulur; tıklanan LinkButton CommandName
değerini nesnesi aracılığıyla geçirilir RepeaterCommandEventArgs
. Özelliğine uygun değeri UsernameToMatch
atamamız ve ardından yöntemini çağırmamız BindUserAccounts
gerekir.
CommandName
Tümü ise, tüm kullanıcı hesaplarının görüntülenmesi için öğesine UsernameToMatch
boş bir dize atayın. Aksi takdirde, CommandName
değerini UsernameToMatch
Protected Sub FilteringUI_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles FilteringUI.ItemCommand
If e.CommandName = "All" Then
Me.UsernameToMatch = String.Empty
Else
Me.UsernameToMatch = e.CommandName
End If
BindUserAccounts()
End Sub
Bu kod yerleşik olarak filtreleme işlevini test edin. Sayfa ilk kez ziyaret edildiğinde tüm kullanıcı hesapları görüntülenir (Şekil 5'e geri bakın). A LinkButton'a tıklanması geri göndermeye neden olur ve sonuçları filtreler ve yalnızca A ile başlayan kullanıcı hesaplarını görüntüler.
Şekil 6: Kullanıcı Adı Belirli Bir Harfle Başlayan Kullanıcıları Görüntülemek için Filtreleme Bağlantısı Düğmelerini Kullanma (Tam boyutlu resmi görüntülemek için tıklayın)
4. Adım: GridView'ı Disk Belleği Kullanacak Şekilde Güncelleştirme
Şekil 5 ve 6'da gösterilen GridView yönteminden FindUsersByName
döndürülen tüm kayıtları listeler. Yüzlerce veya binlerce kullanıcı hesabı varsa, bu durum tüm hesapları görüntülerken (Tüm BağlantıDüğmesi'ne tıklandığında veya sayfayı ilk ziyaret ettiğinizde olduğu gibi) bilgilerin aşırı yüklenmesine yol açabilir. Kullanıcı hesaplarının daha yönetilebilir öbekler halinde sunulmasına yardımcı olmak için GridView'u bir kerede 10 kullanıcı hesabını görüntüleyecek şekilde yapılandıralım.
GridView denetimi iki tür disk belleği sunar:
- Varsayılan sayfalama - uygulanması kolaydır, ancak verimli değildir. Özetle, GridView varsayılan disk belleğiyle veri kaynağındaki tüm kayıtları bekler. Ardından yalnızca uygun kayıt sayfasını görüntüler.
- Özel disk belleği - uygulamak için daha fazla çalışma gerektirir, ancak özel disk belleğiyle veri kaynağı yalnızca görüntülenecek kesin kayıt kümesini döndürdüğünden varsayılan disk belleğinden daha verimlidir.
Binlerce kayıtta sayfalama yaparken varsayılan ve özel disk belleği arasındaki performans farkı oldukça önemli olabilir. Yüzlerce veya binlerce kullanıcı hesabı olabileceğini varsayarak bu arabirimi derlediğimiz için özel sayfalama kullanalım.
Not
Varsayılan ve özel disk belleği arasındaki farkların yanı sıra özel disk belleği uygulamayla ilgili güçlükler hakkında daha kapsamlı bir tartışma için bkz. Büyük Miktarda Veri Üzerinden Verimli Bir Şekilde Sayfalama. Varsayılan ve özel disk belleği arasındaki performans farkının analizi için bkz. SQL Server 2005 ile ASP.NET'de Özel Disk Belleği.
Özel disk belleği uygulamak için öncelikle GridView tarafından görüntülenen kayıtların kesin alt kümesini alacak bir mekanizmaya ihtiyacımız vardır. İyi haber, sınıfın FindUsersByName
yönteminin Membership
sayfa dizinini ve sayfa boyutunu belirtmemize olanak tanıyan bir aşırı yüklemesi olması ve yalnızca bu kayıt aralığındaki kullanıcı hesaplarını döndürmesi.
Özellikle, bu aşırı yükleme şu imzaya sahiptir: FindUsersByName(usernameToMatch, pageIndex, pageSize, totalRecords)
.
pageIndex parametresi, döndürülecek kullanıcı hesaplarının sayfasını belirtir; pageSize, sayfa başına kaç kaydın görüntüleneceğini gösterir.
totalRecords parametresi, kullanıcı deposundaki toplam kullanıcı hesabı sayısını döndüren bir ByRef
parametredir.
Not
Tarafından döndürülen FindUsersByName
veriler kullanıcı adına göre sıralanır; sıralama ölçütleri özelleştirilemez.
GridView, yalnızca objectDataSource denetimine bağlı olduğunda özel disk belleği kullanmak üzere yapılandırılabilir. ObjectDataSource denetiminin özel disk belleği uygulaması için iki yöntem gerekir: biri başlangıç satırı dizinine geçirilir ve görüntülenecek en fazla kayıt sayısı ve bu aralıkta yer alan kayıtların kesin alt kümesini döndürür; ve sayfalanan kayıtların toplam sayısını döndüren bir yöntem. Aşırı FindUsersByName
yükleme bir sayfa dizinini ve sayfa boyutunu kabul eder ve bir ByRef
parametre aracılığıyla toplam kayıt sayısını döndürür. Yani burada bir arabirim uyuşmazlığı var.
Bir seçenek, ObjectDataSource'un beklediği arabirimi kullanıma sunan ve ardından dahili olarak yöntemini çağıran FindUsersByName
bir proxy sınıfı oluşturmaktır. Bu makalede kullanacağımız bir diğer seçenek de kendi disk belleği arabirimimizi oluşturmak ve GridView'un yerleşik disk belleği arabirimi yerine bunu kullanmaktır.
İlk, Önceki, Sonraki, Son Sayfalama Arabirimi Oluşturma
First, Previous, Next ve Last LinkButtons ile bir disk belleği arabirimi oluşturalım. tıklandığında İlk BağlantıDüğmesi kullanıcıyı ilk veri sayfasına götürürken, Önceki, onu önceki sayfaya döndürür. Benzer şekilde, İleri ve Son, kullanıcıyı sırasıyla sonraki ve son sayfaya taşır. GridView'un altına UserAccounts
dört LinkButton denetimi ekleyin.
<p>
<asp:LinkButton ID="lnkFirst" runat="server"> First</asp:LinkButton> |
<asp:LinkButton ID="lnkPrev" runat="server"> Prev</asp:LinkButton> |
<asp:LinkButton ID="lnkNext" runat="server">Next </asp:LinkButton> |
<asp:LinkButton ID="lnkLast" runat="server">Last </asp:LinkButton>
</p>
Ardından, LinkButton Click
olaylarının her biri için bir olay işleyicisi oluşturun.
Şekil 7'de, Visual Web Developer Design görünümü aracılığıyla görüntülendiğinde dört LinkButton gösterilmektedir.
Şekil 7: GridView'un Altına İlk, Önceki, Sonraki ve Son Bağlantı Düğmelerini Ekle (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Geçerli Sayfa Dizinini İzleme
Kullanıcı sayfayı ManageUsers.aspx
ilk kez ziyaret ettiğinde veya filtreleme düğmelerinden birine tıkladığında GridView'da ilk veri sayfasını görüntülemek isteriz. Ancak kullanıcı Gezinti LinkButton'larından birine tıkladığında sayfa dizinini güncelleştirmemiz gerekir. Sayfa dizinini ve sayfa başına görüntülenecek kayıt sayısını korumak için sayfanın arka kod sınıfına aşağıdaki iki özelliği ekleyin:
Private Property PageIndex() As Integer
Get
Dim o As Object = ViewState("PageIndex")
If o Is Nothing Then
Return 0
Else
Return Convert.ToInt32(o)
End If
End Get
Set(ByVal Value As Integer)
ViewState("PageIndex") = Value
End Set
End Property
Private ReadOnly Property PageSize() As Integer
Get
Return 10
End Get
End Property
UsernameToMatch
özelliği gibi özelliği de PageIndex
durumunu görüntülemek için değerini kalıcı hale alır. Salt PageSize
okunur özelliği sabit kodlanmış 10 değerini döndürür. İlgili okuyucuyu bu özelliği ile aynı deseni kullanacak şekilde PageIndex
güncelleştirmeye ve ardından sayfayı ziyaret eden kişinin sayfa başına kaç kullanıcı hesabının görüntüleneceğini belirtebileceği şekilde artırmaya ManageUsers.aspx
davet ediyorum.
Yalnızca Geçerli Sayfanın Kayıtlarını Alma, Sayfa Dizinini Güncelleştirme ve Disk Belleği ArabirimiNi Etkinleştirme ve Devre Dışı Bırakma LinkButtons
Disk belleği arabirimi ve PageIndex
ve PageSize
özellikleri eklendiğinde, uygun FindUsersByName
aşırı yüklemeyi kullanması için yöntemini güncelleştirmeye BindUserAccounts
hazırız. Ayrıca, görüntülenen sayfaya bağlı olarak bu yöntemin disk belleği arabirimini etkinleştirmesini veya devre dışı bırakmasını sağlamamız gerekir. Verilerin ilk sayfasını görüntülerken, İlk ve Önceki bağlantıları devre dışı bırakılmalıdır; Son sayfa görüntülenirken İleri ve Son devre dışı bırakılmalıdır.
BindUserAccounts
yöntemini aşağıdaki kodla güncelleştirin:
Private Sub BindUserAccounts()
Dim totalRecords As Integer
UserAccounts.DataSource = Membership.FindUsersByName(Me.UsernameToMatch + "%", Me.PageIndex, Me.PageSize, totalRecords)
UserAccounts.DataBind()
' Enable/disable the paging interface
Dim visitingFirstPage As Boolean = (Me.PageIndex = 0)
lnkFirst.Enabled = Not visitingFirstPage
lnkPrev.Enabled = Not visitingFirstPage
Dim lastPageIndex As Integer = (totalRecords - 1) / Me.PageSize
Dim visitingLastPage As Boolean = (Me.PageIndex >= lastPageIndex)
lnkNext.Enabled = Not visitingLastPage
lnkLast.Enabled = Not visitingLastPage
End Sub
Sayfalanan kayıtların toplam sayısının yönteminin son parametresi FindUsersByName
tarafından belirlendiğini unutmayın. Belirtilen kullanıcı hesabı sayfası döndürüldükten sonra, verilerin ilk veya son sayfasının görüntülenip görüntülenmediğine bağlı olarak dört LinkButton etkin veya devre dışı bırakılır.
Son adım, dört LinkButtons Click
olay işleyicisinin kodunu yazmaktır. Bu olay işleyicilerinin özelliğini güncelleştirmeleri PageIndex
ve ardından The First, Previous ve Next olay işleyicilerine yapılan bir çağrı yoluyla gridview'a BindUserAccounts
verileri yeniden bağlaması gerekir.
Click
Ancak Son LinkButton için olay işleyicisi biraz daha karmaşıktır çünkü son sayfa dizinini belirlemek için kaç kaydın görüntülendiğini belirlememiz gerekir.
Protected Sub lnkFirst_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkFirst.Click
Me.PageIndex = 0
BindUserAccounts()
End Sub
Protected Sub lnkPrev_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkPrev.Click
Me.PageIndex -= 1
BindUserAccounts()
End Sub
Protected Sub lnkNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkNext.Click
Me.PageIndex += 1
BindUserAccounts()
End Sub
Protected Sub lnkLast_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkLast.Click
' Determine the total number of records
Dim totalRecords As Integer
Membership.FindUsersByName(Me.UsernameToMatch + "%", Me.PageIndex, Me.PageSize, totalRecords)
' Navigate to the last page index
Me.PageIndex = (totalRecords - 1) / Me.PageSize
BindUserAccounts()
End Sub
Şekil 8 ve 9'da özel disk belleği arabiriminin çalışması gösterilir. Şekil 8'de ManageUsers.aspx
tüm kullanıcı hesaplarının ilk veri sayfası görüntülenirken sayfa gösterilir. 13 hesabın yalnızca 10'unun görüntülendiğini unutmayın. İleri veya Son bağlantısına tıklanması geri göndermeye PageIndex
neden olur, öğesini 1 olarak güncelleştirir ve kullanıcı hesaplarının ikinci sayfasını kılavuza bağlar (bkz. Şekil 9).
Şekil 8: İlk 10 Kullanıcı Hesabı Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 9: Sonraki Bağlantıya Tıklanması Kullanıcı Hesaplarının İkinci Sayfasını Görüntüler (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özet
Yöneticilerin genellikle hesap listesinden bir kullanıcı seçmesi gerekir. Önceki öğreticilerde kullanıcılarla doldurulmuş bir açılan liste kullanmayı gözden geçirmiştik, ancak bu yaklaşım iyi ölçeklendirilmiyor. Bu öğreticide daha iyi bir alternatif keşfettik: sonuçları sayfalandırılmış GridView'da görüntülenen filtrelenebilir bir arabirim. Bu kullanıcı arabirimiyle, yöneticiler binlerce kullanıcı hesabını hızlı ve verimli bir şekilde bulabilir ve seçebilir.
Mutlu Programlama!
Daha Fazla Bilgi
Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- SQL Server 2005 ile ASP.NET'da özel disk belleği
- Büyük MiktarlardaKi Veriler Aracılığıyla Verimli Bir Şekilde Sayfalama
Yazar hakkında
Birden çok ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Scott'a adresinden mitchell@4guysfromrolla.com veya adresinden blogundan http://ScottOnWriting.NETulaşabilirsiniz.
Özel Teşekkürler
Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçireni Alicja Maziarz'dı. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana bir satır bırakın