Aracılığıyla paylaş


Çok Sayıda Kullanıcı Hesabından Birinin Seçilmesi için Bir Arabirim Oluşturma (VB)

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ı Administrationyeni 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.

Web Sitesine Dört Yeni Sayfa ve Web.config Dosyası Eklendi

Ş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.

Site HaritasıNda Kullanıcı Yönetimi Başlıklı Bir Düğüm Var

Ş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 IDUserAccounts 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, IsApprovedve 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 UserNameBoundFields ile , IsOnlineEmailIsLockedOutve Comment özellikleri için IsApprovedCheckBoxFields 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.

GridView'a Üç BoundField ve Üç CheckBoxField Ekleme

Ş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.

Kullanıcı Hesapları GridView'da Listelenir

Ş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 IDFilteringUI 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ı BindFilteringUIbir 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 StringfilterOptions öğ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.

Yineleyici 27 Filtreleme BağlantısıDüğmesini Listeler

Ş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.GetAllUsersMembership.FindUsersByNameSQL 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.

Kullanıcı Adı Belirli Bir Harfle Başlayan Kullanıcıları Görüntülemek için Filtreleme Bağlantısı Düğmelerini Kullanma

Ş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.

GridView Altına İlk, Önceki, Sonraki ve Son LinkButton'ları Ekleme

Ş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 PageIndexgü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).

İlk 10 Kullanıcı Hesabı Görüntülenir

Ş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)

Sonraki Bağlantıya Tıklanması Kullanıcı Hesaplarının İkinci Sayfasını Görüntüler

Ş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:

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