Rolodex با فیلتر الفبایی با استفاده از DataList ASP.Net
با سلام در این مقاله توضیح می دهیم چگونه Rolodex مخاطب را با استفاده از کنترل DataList ASP.Net ایجاد کنیم. Rolodex به شما اجازه می دهد تا مخاطبین خود را براساس حروف الفبا فیلتر کنید،
کد HTML
کد HTML در زیر داده شده است :
<b>Personal Contacts:</b>
<br /><br />
You are viewing
<asp:Label ID="lblView" runat="server" Text="" />
<table style="width: 440px">
<tr>
<td valign="top" width="420px">
<asp:DataList ID="dlContacts" runat="server" RepeatLayout="Table" RepeatColumns="2"
CellPadding="2" CellSpacing="2">
<ItemTemplate>
<table cellpadding="2" cellspacing="0" style="width: 200px; height: 100px; border: dashed 2px green;
background-color: #C2D69B">
<tr>
<td colspan="2">
<b>
<%# Eval("ContactName") %></b>
</td>
</tr>
<tr>
<td colspan="2">
<%# Eval("City") %>,
<%# Eval("PostalCode") %><br />
<%# Eval("Country")%>
</td>
</tr>
<tr>
<td>
Phone:
</td>
<td>
<%# Eval("Phone")%>
</td>
</tr>
<tr>
<td>
Fax:
</td>
<td>
<%# Eval("Fax")%>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</td>
<td valign="top">
<asp:Repeater ID="rptAlphabets" runat="server">
<ItemTemplate>
<asp:LinkButton ID="lnkAlphabet" runat="server" Text='<%#Eval("Value")%>' OnClick="Alphabet_Click"
Enabled='<%# Eval("isNotSelected")%>' />
<br />
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
</table>
در بالا متوجه شدید که یک DataList ASP.Net و کنترل تکراری ASP.Net را استفاده کرده ایم .
DataList برای نمایش مخاطبین مورد استفاده قرار می گیرد در حالی که کنترل تکرار کننده برای ایجاد لیست حروف الفبا استفاده می شود.
دو قسمت برای این آموزش وجود دارد.
1. جمع آوری لیست حروف الفبا
2. جمع آوری مخاطبین از پایگاه داده.
جمع آوری لیست حروف الفبا
برای پر کردن لیست الفبا یک کلاس ایجاد کرده ایم که حروف را ذخیره می کند
C #
public class Alphabet
{
private string _value;
private bool _isNotSelected;
public string Value
{
get
{
return _value;
}
set
{
_value = value;
}
}
public bool isNotSelected
{
get
{
return _isNotSelected;
}
set
{
_isNotSelected = value;
}
}
}
VB.Net
Public Class Alphabet
Private _value As String
Private _isNotSelected As Boolean
Public Property Value() As String
Get
Return _value
End Get
Set(ByVal value As String)
_value = value
End Set
End Property
Public Property isNotSelected() As Boolean
Get
Return _isNotSelected
End Get
Set(ByVal value As Boolean)
_isNotSelected= value
End Set
End Property
End Class
دو ویژگی Value و isNotSelected وجود دارد . در محل ذخیره شده IsNotSelected مشخص میکند که آیا الفبای آن انتخاب شده است یا خیر. بنابراین به ما کمک می کند تا مشخص کنیم که کدام حروف الفبای در حال حاضر توسط کاربر انتخاب شده است .
روش شرح داده شده در زیر به عنوان لیستی از حروف ساخته شده است که برای مرتب کردن مخاطبین براساس نام اول آنها استفاده می شود .
C #
private void GenerateAlphabets()
{
List<Alphabet> alphabets = new List<Alphabet>();
Alphabet alphabet = new Alphabet();
alphabet.Value = "ALL";
alphabet.isNotSelected = !alphabet.Value
.Equals(ViewState["CurrentAlphabet"]);
alphabets.Add(alphabet);
for (int i = 65; i <= 90; i++)
{
alphabet = new Alphabet();
alphabet.Value = Char.ConvertFromUtf32(i);
alphabet.isNotSelected = !alphabet.Value
.Equals(ViewState["CurrentAlphabet"]);
alphabets.Add(alphabet);
}
rptAlphabets.DataSource = alphabets;
rptAlphabets.DataBind();
}
VB.Net
Private Sub GenerateAlphabets()
Dim alphabets As New List(Of Alphabet)()
Dim alphabet As New Alphabet()
alphabet.Value = "ALL"
alphabet.isNotSelected = Not alphabet.Value _
.Equals(ViewState("CurrentAlphabet"))
alphabets.Add(alphabet)
For i As Integer = 65 To 90
alphabet = New Alphabet()
alphabet.Value = [Char].ConvertFromUtf32(i)
alphabet.isNotSelected = Not alphabet.Value _
.Equals(ViewState("CurrentAlphabet"))
alphabets.Add(alphabet)
Next
rptAlphabets.DataSource = alphabets
rptAlphabets.DataBind()
End Sub
در بالامتوجه شدید که روش حلقه ها و فهرست الفبایی را همراه با مورد ALL انتخاب می کند که به طور پیش فرض انتخاب شده است. بعدها لیست به یک تکرار کننده کنترل ASP.Net متصل می شود. متغیر ViewState برای ذخیره الفبا انتخاب شده است و، به طور پیش فرض ALL ذخیره می شود که به این معنی است که تمام پرونده ها نمایش داده می شوند .
جمع آوری مخاطبین از پایگاه داده
برای این آموزش از پایگاه داده Microsoft NorthWind استفاده کردم. شما می توانید لینک زیر را دانلود کنید.
دانلود Northwind پایگاه داده
هنگامی که پایگاه داده را دانلود کردید، اسکریپت زیر را اجرا کنید تا روش ذخیره شده را ایجاد کنید که رکوردها را بر اساس اولین حرف نام مشتری، فیلتر کند.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[spx_GetContacts]
@Alphabet VARCHAR(10)
AS
BEGIN
SET NOCOUNT ON;
IF @Alphabet = 'ALL'
BEGIN
SELECT *
FROM Customers
END
ELSE
BEGIN
SELECT *
FROM Customers
WHERE ContactName LIKE @Alphabet + '%'
END
END
روش ذخیره شده بسیار ساده است. این پارامتر Alphabet نامیده می شود . اگر الفبای ALL باشد، همه پرونده ها نمایش داده می شوند . سوابق بر اساس الفبای با استفاده از دستور LIKE فیلتر می شوند.
هنگامی که روش ذخیره شده ایجاد می شود، می توانیم به برنامه وب بازگردیم. روش زیراسامی فراخوانی روش پیشنهادی که قبلا ایجاد کرده است را نشان می دهد و لیست فیلتر شده بازگشت از مخاطبین را به کنترل DataList ASP.Net مرتبط می کند.
C #
private void BindDataList()
{
string conStr = ConfigurationManager
.ConnectionStrings["conStr"].ConnectionString;
SqlConnection con = new SqlConnection(conStr);
SqlCommand cmd = new SqlCommand("spx_GetContacts");
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Alphabet", ViewState["CurrentAlphabet"]);
con.Open();
dlContacts.DataSource = cmd.ExecuteReader();
dlContacts.DataBind();
con.Close();
if (ViewState["CurrentAlphabet"].ToString().Equals("ALL"))
lblView.Text = "all Contacts.";
else
lblView.Text = "Contacts whose name starts with "
+ ViewState["CurrentAlphabet"].ToString();
}
VB.Net
Private Sub BindDataList()
Dim conStr As String = ConfigurationManager _
.ConnectionStrings("conStr").ConnectionString
Dim con As New SqlConnection(conStr)
Dim cmd As New SqlCommand("spx_GetContacts")
cmd.Connection = con
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@Alphabet", ViewState("CurrentAlphabet"))
con.Open()
dlContacts.DataSource = cmd.ExecuteReader()
dlContacts.DataBind()
con.Close()
If ViewState("CurrentAlphabet").ToString().Equals("ALL") Then
lblView.Text = "all Contacts."
Else
lblView.Text = "Contacts whose name starts with " & _
ViewState("CurrentAlphabet").ToString()
End If
End Sub
روش های بالا در رویداد بارگذاری صفحات وب ASP.Net به روش زیر انجام میشود .
C #
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["CurrentAlphabet"] = "ALL";
this.GenerateAlphabets();
this.BindDataList();
}
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not IsPostBack Then
ViewState("CurrentAlphabet") = "ALL"
Me.GenerateAlphabets()
Me.BindDataList()
End If
End Sub
در نهایت رویداد زیر را هنگامی که LinkButtons در کنترل تکرار ASP.Net است کلیک می کنیم .
C #
protected void Alphabet_Click(object sender, EventArgs e)
{
LinkButton lnkAlphabet = (LinkButton)sender;
ViewState["CurrentAlphabet"] = lnkAlphabet.Text;
this.GenerateAlphabets();
this.BindDataList();
}
VB.Net
Protected Sub Alphabet_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim lnkAlphabet As LinkButton = DirectCast(sender, LinkButton)
ViewState("CurrentAlphabet") = lnkAlphabet.Text
Me.GenerateAlphabets()
Me.BindDataList()
End Sub
همانطور که متوجه می شوید، زمانی که روی LinkButton کلیک می شود، الفبای انتخاب شده در متغیر ViewState و Repeater و DataList پر شده است.
تصویر زیر Rolodex را نشان می دهد که مخاطبین فیلتر شده با استفاده از حروف را نمایش می دهد .
