Aracılığıyla paylaş


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

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öründeki sayfayı ManageUsers.aspx açın ve bir GridView ekleyin ve bu sayfayı IDAdministration olarak UserAccountsayarlayı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, 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 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.

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'ın ID özelliğini olarak FilteringUIayarlayı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ı BindFilteringUIbir 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 stringfilterOptionsöğ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.

Repeater Listeler 27 Filtreleme BağlantısıDüğmesi

Ş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ı UsernameToMatchbir ö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.GetAllUsersSQL 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 UsernameToMatchatayı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.

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

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

GridView Altına İlk, Önceki, Sonraki ve Son Bağlantı Düğmelerini Ekle

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

İ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ı 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:

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