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öründeki sayfayı ManageUsers.aspx
açın ve bir GridView ekleyin ve bu sayfayı ID
Administration
olarak UserAccounts
ayarlayın. Bir dakika içinde, sınıfın yöntemini kullanarak Membership
kullanıcı hesapları kümesini GridView'a GetAllUsers
bağlamak için kod yazacağız. Önceki öğreticilerde açıklandığı gibi, GetAllUsers yöntemi bir MembershipUserCollection
nesne 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 void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
BindUserAccounts();
}
private void BindUserAccounts()
{
UserAccounts.DataSource = Membership.GetAllUsers();
UserAccounts.DataBind();
}
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'ın ID
özelliğini olarak FilteringUI
ayarlayın. Repeater'ın şablonlarınıItemTemplate
, ve CommandName
özellikleri geçerli dizi öğesine bağlı olan Text
bir LinkButton işleyebilecek şekilde yapılandırın. 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 void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindUserAccounts();
BindFilteringUI();
}
}
private void BindFilteringUI()
{
string[] filterOptions = { "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();
}
Bu yöntem, filtreleme seçeneklerini dizisindeki string
filterOptions
öğeler olarak belirtir. Dizideki her öğe için Repeater, 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 Listeler 27 Filtreleme BağlantısıDüğmesi (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.
Sayfanın arka planda kod sınıfını adlı UsernameToMatch
bir özellik içermesi için güncelleştirerek ManageUser.aspx
başlayın. Bu özellik, kullanıcı adı filtre dizesini geri göndermeler arasında kalıcı hale koyar:
private string UsernameToMatch
{
get
{
object o = ViewState["UsernameToMatch"];
if (o == null)
return string.Empty;
else
return (string)o;
}
set
{
ViewState["UsernameToMatch"] = value;
}
}
özelliği, UsernameToMatch
KullanıcıAdıToMatch 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
SQL joker karakteriyle eklenen özelliğin UsernameToMatch
değerini geçirerek öğesini çağıran Membership.FindUsersByName
şekilde güncelleştirinBindUserAccounts
.
private void BindUserAccounts()
{
UserAccounts.DataSource = Membership.FindUsersByName(this.UsernameToMatch + "%");
UserAccounts.DataBind();
}
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 çağrısı yapın BindUserAccounts
. Bu, kullanıcı adı A ile başlayan tüm kullanıcıları döndüren çağrısıyla Membership.FindUsersByName("A%")
sonuçlanır. Benzer şekilde, tüm kullanıcıları döndürmek için, yöntemin UsernameToMatch
çağırması Membership.FindUsersByName("%")
için özelliğine boş bir dize atayın BindUserAccounts
ve böylece 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 değerini olarak UsernameToMatch
atayınCommandName
.
protected void FilteringUI_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "All")
this.UsernameToMatch = string.Empty;
else
this.UsernameToMatch e.CommandName;
BindUserAccounts();
}
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ı Düğmelerini Kullanma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
4. Adım: GridView'ı Sayfalama 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 aşırı bilgiye neden olabilir (Tüm LinkButton'a tıklandığında veya sayfayı ilk ziyaret ettiğinizde olduğu gibi). Kullanıcı hesaplarının daha yönetilebilir öbekler halinde sunulmasına yardımcı olmak için GridView'u aynı anda 10 kullanıcı hesabını görüntüleyecek şekilde yapılandıralım.
GridView denetimi iki tür sayfalama sunar:
- Varsayılan sayfalama - uygulanması kolaydır, ancak verimli değildir. Özetle, GridView varsayılan sayfalama ile veri kaynağındaki tüm kayıtları bekler. Daha sonra 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 disk belleği 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 ve özel disk belleği uygulamayla ilgili güçlükler hakkında daha kapsamlı bir tartışma için Bkz. Büyük Miktarlarda Veri Üzerinden Verimli Bir Şekilde Sayfalama.
Özel disk belleği uygulamak için öncelikle GridView tarafından görüntülenen kayıtların kesin alt kümesinin alındığı 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ığında yer alan 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ç kayıt görüntüleneceğini gösterir.
totalRecords parametresi, kullanıcı deposundaki toplam kullanıcı hesabı sayısını döndüren bir out
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 özel disk belleği kullanacak şekilde yapılandırılabilir, ancak yalnızca bir ObjectDataSource denetimine bağlı olduğunda. ObjectDataSource denetiminin özel disk belleği uygulaması için iki yöntem gerekir: bir başlangıç satırı dizini geçirilir ve görüntülenecek en fazla kayıt sayısı ve bu yayılma alanına giren 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 dizini ve sayfa boyutu kabul eder ve bir out
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şturmak olabilir. 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
İlk, Önceki, Sonraki ve Son BağlantıDüğmesi 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 istiyoruz. 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 int PageIndex
{
get
{
object o = ViewState["PageIndex"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["PageIndex"] = value;
}
}
private int PageSize
{
get
{
return 10;
}
}
UsernameToMatch
özelliği gibi özelliği de PageIndex
durumunu görüntülemek için değerini kalıcı hale getirdi. Salt okunur PageSize
ö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 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 Arabirimi Bağlantı Düğmelerini Etkinleştirme ve Devre Dışı Bırakma
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 Next ve Last devre dışı bırakılmalıdır.
BindUserAccounts
yöntemini aşağıdaki kodla güncelleştirin:
private void BindUserAccounts()
{
int totalRecords;
UserAccounts.DataSource = Membership.FindUsersByName(this.UsernameToMatch + "%",this.PageIndex, this.PageSize, out totalRecords);
UserAccounts.DataBind();
// Enable/disable the paging interface
bool visitingFirstPage = (this.PageIndex == 0);
lnkFirst.Enabled = !visitingFirstPage;
lnkPrev.Enabled = !visitingFirstPage;
int lastPageIndex = (totalRecords - 1) / this.PageSize;
bool visitingLastPage = (this.PageIndex >= lastPageIndex);
lnkNext.Enabled = !visitingLastPage;
lnkLast.Enabled = !visitingLastPage;
}
Sayfalanan kayıtların toplam sayısının yöntemin son parametresi FindUsersByName
tarafından belirlendiğini unutmayın. Bu bir out
parametredir, bu nedenle önce bu değeri (totalRecords
) tutmak için bir değişken bildirmemiz ve ardından anahtar sözcüğüne out
ön ek eklememiz gerekir.
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 LinkButton'ın Click
olay işleyicisinin kodunu yazmaktır. Bu olay işleyicilerinin özelliğini güncelleştirmesi PageIndex
ve ardından çağrısı aracılığıyla verileri GridView'a yeniden bağlaması BindUserAccounts
gerekir. İlk, Önceki ve Sonraki olay işleyicileri çok basittir.
Click
Ancak Son BağlantıDüğmesinin 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 void lnkFirst_Click(object sender, EventArgs e)
{
this.PageIndex = 0;
BindUserAccounts();
}
protected void lnkPrev_Click(object sender, EventArgs e)
{
this.PageIndex -= 1;
BindUserAccounts();
}
protected void lnkNext_Click(object sender, EventArgs e)
{
this.PageIndex += 1;
BindUserAccounts();
}
protected void lnkLast_Click(object sender, EventArgs e)
{
// Determine the total number of records
int totalRecords;
Membership.FindUsersByName(this.UsernameToMatch + "%", this.PageIndex,this.PageSize, out totalRecords);
// Navigate to the last page index
this.PageIndex = (totalRecords - 1) / this.PageSize;
BindUserAccounts();
}
Şekil 8 ve 9'da özel disk belleği arabiriminin çalışması gösterilmektedir. Şekil 8'de ManageUsers.aspx
tüm kullanıcı hesapları için verilerin ilk 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 neden olur, öğesini 1 olarak güncelleştirir PageIndex
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ı ele aldık, 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ıdan birini 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 Miktarda Veri 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 Saat içinde 2.0. Scott'a adresinden mitchell@4guysfromrolla.com veya adresinden blogu http://ScottOnWriting.NETaracılığıyla ulaşılabilir.
Ö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 oldu. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana bir satır bırakın mitchell@4GuysFromRolla.com