ASP.NET - راهنمای سریع قسمت سوم

کنترل AccessDataSourceکنترل AccessDataSource نشان دهنده اتصال به پایگاه داده Access است. این بر اساس کنترل SqlDataSource است و رابط برنامه نویسی ساده تری را ارائه می دهد. قطعه کد زیر دستور اولیه منبع داده را ارائه می دهد:<asp:AccessDataSource ID="AccessDataSource1 runat="server" DataFile="~/App_Data/ASPDotNetStepByStep.mdb" SelectCommand="SELECT * FROM [DotNetReferences]"></asp:AccessDataSource>کنترل AccessDataSource پایگاه داده را در حالت فقط خواندنی باز می کند. با این حال، می توان از آن برای انجام عملیات درج، به روز رسانی یا حذف نیز استفاده کرد. این کار با استفاده از دستورات و مجموعه پارامترهای ADO.NET انجام می شود.به‌روزرسانی‌ها برای پایگاه‌های داده Access از داخل یک برنامه ASP.NET مشکل‌ساز هستند، زیرا پایگاه داده Access یک فایل ساده است و حساب پیش‌فرض برنامه ASP.NET ممکن است مجوز نوشتن در فایل پایگاه داده را نداشته باشد.ASP.NET - Data Bindingهر کنترل فرم وب ASP.NET متد DataBind را از کلاس Control والد خود به ارث می برد، که به آن قابلیت ذاتی می دهد تا داده ها را به حداقل یکی از ویژگی های خود متصل کند. این به عنوان اتصال داده ساده یا اتصال داده درون خطی شناخته می شود.اتصال ساده داده شامل پیوست کردن هر مجموعه (مجموعه آیتم) است که رابط IEnumerable یا کلاس های DataSet و DataTable را به ویژگی DataSource کنترل پیاده سازی می کند.از سوی دیگر، برخی از کنترل‌ها می‌توانند رکوردها، فهرست‌ها یا ستون‌های داده را از طریق یک کنترل DataSource به ساختار خود متصل کنند. این کنترل ها از کلاس BaseDataBoundControl مشتق شده اند. به این کار الزام آور داده های اعلامی می گویند.کنترل‌های منبع داده به کنترل‌های محدود به داده کمک می‌کنند تا عملکردهایی مانند مرتب‌سازی، صفحه‌بندی و ویرایش مجموعه‌های داده را اجرا کنند.BaseDataBoundControl یک کلاس انتزاعی است که توسط دو کلاس انتزاعی دیگر به ارث می رسد:DataBoundControlHierarchicalDataBoundControlکلاس انتزاعی DataBoundControl دوباره توسط دو کلاس انتزاعی دیگر به ارث می رسد:ListControlCompositeDataBoundControlکنترل هایی که قادر به اتصال ساده داده ها هستند از کلاس انتزاعی ListControl مشتق شده اند و این کنترل ها عبارتند از:Bulleted ListCheckBoxListفهرست کشوییکادر فهرستRadioButtonListکنترل‌هایی که قادر به اتصال داده‌های اعلانی (یک پیوند داده پیچیده‌تر) هستند از کلاس انتزاعی CompositeDataBoundControl مشتق شده‌اند. این کنترل ها عبارتند از:مشاهده جزئیاتFormViewGridViewفهرست رکوردهااتصال ساده داده هااتصال ساده داده شامل لیست های انتخابی فقط خواندنی است. این کنترل ها می توانند به یک لیست آرایه یا فیلدهای یک پایگاه داده متصل شوند. لیست انتخاب دو مقدار را از پایگاه داده یا منبع داده می گیرد. یک مقدار توسط لیست نمایش داده می شود و دیگری به عنوان مقدار مربوط به نمایش در نظر گرفته می شود.اجازه دهید یک مثال کوچک برای درک مفهوم بیاوریم. یک وب سایت با یک لیست گلوله ای و یک کنترل SqlDataSource روی آن ایجاد کنید. کنترل منبع داده را برای بازیابی دو مقدار از پایگاه داده خود پیکربندی کنید (ما از همان جدول DotNetReferences مانند فصل قبل استفاده می کنیم).انتخاب یک منبع داده برای کنترل لیست گلوله‌ای شامل موارد زیر است:انتخاب کنترل منبع دادهانتخاب یک فیلد برای نمایش که به آن فیلد داده می گویندانتخاب یک فیلد برای مقدارهنگامی که برنامه اجرا می شود، بررسی کنید که کل ستون عنوان به لیست گلوله بندی شده و نمایش داده شود.الزام آور داده های اعلامیقبلاً در آموزش قبلی با استفاده از کنترل GridView از binding داده های اعلانی استفاده کرده ایم. دیگر کنترل‌های مرکب داده‌ای که قادر به نمایش و دستکاری داده‌ها به صورت جدولی هستند، کنترل DetailsView، FormView و RecordList هستند.در آموزش بعدی، فناوری مدیریت پایگاه داده، یعنی ADO.NET را بررسی خواهیم کرد.با این حال، اتصال داده شامل اشیاء زیر است:مجموعه داده ای که داده های بازیابی شده از پایگاه داده را ذخیره می کند.ارائه‌دهنده داده، که داده‌ها را با استفاده از یک فرمان روی یک اتصال، از پایگاه داده بازیابی می‌کند.آداپتور داده ای که دستور select ذخیره شده در شی فرمان را صادر می کند. همچنین قادر به به روز رسانی داده ها در پایگاه داده با صدور عبارت Insert، Delete و Update است.رابطه بین اشیاء اتصال داده:مثالاجازه دهید مراحل زیر را انجام دهیم:مرحله (1): یک وب سایت جدید ایجاد کنید. با کلیک راست روی نام راه حل در Solution Explorer و انتخاب مورد «Class» از کادر محاوره ای «افزودن آیتم»، یک فهرست کتاب به نام کلاس اضافه کنید. نام آن را booklist.cs بگذارید.using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;namespace databinding{ public class booklist { protected String bookname; protected String authorname; public booklist(String bname, String aname) { this.bookname = bname; this.authorname = aname; } public String Book { get { return this.bookname; } set { this.bookname = value; } } public String Author { get { return this.authorname; } set { this.authorname = value; } } }}مرحله (2): چهار کنترل لیست را به صفحه اضافه کنید، یک کنترل جعبه لیست، یک لیست دکمه های رادیویی، یک لیست چک باکس، و یک لیست کشویی و چهار برچسب به همراه این کنترل های لیست. صفحه باید از نظر طراحی شبیه به این باشد:فایل منبع باید به صورت زیر باشد:<form id="form1" runat="server"> <div> <table style="width: 559px"> <tr> <td style="width: 228px; height: 157px;"> <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged"> </asp:ListBox> </td> <td style="height: 157px"> <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> </asp:DropDownList> </td> </tr> <tr> <td style="width: 228px; height: 40px;"> <asp:Label ID="lbllistbox" runat="server"></asp:Label> </td> <td style="height: 40px"> <asp:Label ID="lbldrpdown" runat="server"> </asp:Label> </td> </tr> <tr> <td style="width: 228px; height: 21px"> </td> <td style="height: 21px"> </td> </tr> <tr> <td style="width: 228px; height: 21px"> <asp:RadioButtonList ID="RadioButtonList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged"> </asp:RadioButtonList> </td> <td style="height: 21px"> <asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged"> </asp:CheckBoxList> </td> </tr> <tr> <td style="width: 228px; height: 21px"> <asp:Label ID="lblrdlist" runat="server"> </asp:Label> </td> <td style="height: 21px"> <asp:Label ID="lblchklist" runat="server"> </asp:Label> </td> </tr> </table> </div></form>مرحله (3): در نهایت، کد زیر را در پشت روتین های برنامه بنویسید:public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { IList bklist = createbooklist(); if (!this.IsPostBack) { this.ListBox1.DataSource = bklist; this.ListBox1.DataTextField = "Book"; this.ListBox1.DataValueField = "Author"; this.DropDownList1.DataSource = bklist; this.DropDownList1.DataTextField = "Book"; this.DropDownList1.DataValueField = "Author"; this.RadioButtonList1.DataSource = bklist; this.RadioButtonList1.DataTextField = "Book"; this.RadioButtonList1.DataValueField = "Author"; this.CheckBoxList1.DataSource = bklist; this.CheckBoxList1.DataTextField = "Book"; this.CheckBoxList1.DataValueField = "Author"; this.DataBind(); } } protected IList createbooklist() { ArrayList allbooks = new ArrayList(); booklist bl; bl = new booklist("UNIX CONCEPTS", "SUMITABHA DAS"); allbooks.Add(bl); bl = new booklist("PROGRAMMING IN C", "RICHI KERNIGHAN"); allbooks.Add(bl); bl = new booklist("DATA STRUCTURE", "TANENBAUM"); allbooks.Add(bl); bl = new booklist("NETWORKING CONCEPTS", "FOROUZAN"); allbooks.Add(bl); bl = new booklist("PROGRAMMING IN C++", "B. STROUSTROUP"); allbooks.Add(bl); bl = new booklist("ADVANCED JAVA", "SUMITABHA DAS"); allbooks.Add(bl); return allbooks; } protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { this.lbllistbox.Text = this.ListBox1.SelectedValue; } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { this.lbldrpdown.Text = this.DropDownList1.SelectedValue; } protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e) { this.lblrdlist.Text = this.RadioButtonList1.SelectedValue; } protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e) { this.lblchklist.Text = this.CheckBoxList1.SelectedValue; }}موارد زیر را رعایت کنید:کلاس booklist دو ویژگی دارد: bookname و authorname.متد createbooklist یک روش تعریف شده توسط کاربر است که آرایه ای از اشیاء فهرست کتاب به نام allbooks را ایجاد می کند.کنترل کننده رویداد Page_Load اطمینان حاصل می کند که فهرستی از کتاب ها ایجاد شده است. لیست از نوع IList است که رابط IEnumerable را پیاده سازی می کند و می تواند به کنترل های لیست متصل شود. کنترل کننده رویداد بارگذاری صفحه، شی IList 'bklist' را با کنترل های لیست پیوند می دهد. ویژگی bookname نمایش داده می شود و ویژگی authorname به عنوان مقدار در نظر گرفته می شود.هنگامی که صفحه اجرا می شود، اگر کاربر کتابی را انتخاب کند، نام آن انتخاب شده و توسط کنترل های لیست نمایش داده می شود، در حالی که برچسب های مربوطه نام نویسنده را نشان می دهند که مقدار متناظر برای نمایه انتخابی کنترل لیست است.ASP.NET - کنترل های سفارشیکنترل های کاربرکنترل‌های کاربر مانند صفحات کوچک ASP.NET یا فرم‌های وب عمل می‌کنند که می‌توانند توسط بسیاری از صفحات دیگر استفاده شوند. اینها از کلاس System.Web.UI.UserControl مشتق شده اند. این کنترل ها دارای ویژگی های زیر هستند:آنها پسوند .ascx دارند.آنها ممکن است حاوی هیچ تگ <html>، <body> یا <form> نباشند.آنها یک دستورالعمل کنترل به جای یک دستورالعمل صفحه دارند.برای درک مفهوم، اجازه دهید یک کنترل کاربر ساده ایجاد کنیم که به عنوان پاورقی برای صفحات وب کار می کند. برای ایجاد و استفاده از کنترل کاربر، مراحل زیر را انجام دهید:یک برنامه وب جدید ایجاد کنید.روی پوشه پروژه در Solution Explorer کلیک راست کرده و Add New Item را انتخاب کنید.Web User Control را از کادر محاوره ای Add New Item انتخاب کنید و نام آن را footer.ascx بگذارید. در ابتدا، footer.ascx فقط حاوی یک دستورالعمل کنترل است.<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs" Inherits="customcontroldemo.footer" %>کد زیر را به فایل اضافه کنید:<table> <tr> <td align="center"> Copyright ©2010 TutorialPoints Ltd.</td> </tr> <tr> <td align="center"> Location: Hyderabad, A.P </td> </tr></table>برای افزودن کنترل کاربر به صفحه وب خود، باید دستورالعمل Register و نمونه ای از کنترل کاربر را به صفحه اضافه کنید. کد زیر فایل محتوا را نشان می دهد:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="customcontroldemo._Default" %><%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Welcome to ASP.Net Tutorials "></asp:Label> <br /> <br /> <asp:Button ID="Button1" runat="server" ="Button1_Click" Text="Copyright Info" /> </div> <Tfooter:footer ID="footer1" runat="server" /> </form> </body></html>هنگام اجرا، صفحه فوتر را نشان می دهد و این کنترل می تواند در تمام صفحات وب سایت شما استفاده شود.موارد زیر را رعایت کنید:(1) دستورالعمل Register یک نام تگ و همچنین پیشوند تگ را برای کنترل مشخص می کند.<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>(2) هنگام افزودن کنترل کاربر در صفحه باید از نام تگ و پیشوند زیر استفاده شود:<Tfooter:footer ID="footer1" runat="server" />کنترل های سفارشیکنترل های سفارشی به عنوان مجموعه های فردی مستقر می شوند. آنها در یک کتابخانه پیوند پویا (DLL) کامپایل شده و به عنوان هر کنترل سرور ASP.NET دیگر استفاده می شوند. آنها می توانند به یکی از روش های زیر ایجاد شوند:با استخراج یک کنترل سفارشی از یک کنترل موجودبا ایجاد یک کنترل سفارشی جدید که دو یا چند کنترل موجود را ترکیب می کند.با استخراج از کلاس کنترل پایه.برای درک مفهوم، اجازه دهید یک کنترل سفارشی ایجاد کنیم، که به سادگی یک پیام متنی در مرورگر ارائه می دهد. برای ایجاد این کنترل، مراحل زیر را انجام دهید:یک وب سایت جدید ایجاد کنید. روی راه حل (نه پروژه) در بالای درخت در Solution Explorer کلیک راست کنید.در کادر محاوره‌ای پروژه جدید، ASP.NET Server Control را از قالب‌های پروژه انتخاب کنید.مرحله بالا یک پروژه جدید اضافه می کند و یک کنترل سفارشی کامل به راه حل ایجاد می کند که ServerControl1 نامیده می شود. در این مثال، اجازه دهید نام پروژه را CustomControls بگذاریم. برای استفاده از این کنترل، قبل از ثبت آن در یک صفحه، باید به عنوان مرجع به وب سایت اضافه شود. برای افزودن یک مرجع به پروژه موجود، روی پروژه (نه راه حل) کلیک راست کرده و روی Add Reference کلیک کنید.پروژه CustomControls را از تب Projects در کادر گفتگوی Add Reference انتخاب کنید. Solution Explorer باید مرجع را نشان دهد.برای استفاده از کنترل در یک صفحه، دستور Register را درست در زیر دستورالعمل @Page اضافه کنید:<%@ Register Assembly="CustomControls" Namespace="CustomControls" TagPrefix="ccs" %>علاوه بر این، می توانید از کنترل، مشابه هر کنترل دیگری استفاده کنید.<form id="form1" runat="server"> <div> <ccs:ServerControl1 runat="server" Text = "I am a Custom Server Control" /> </div> </form>هنگامی که اجرا می شود، ویژگی Text کنترل بر روی مرورگر به شکل زیر نمایش داده می شود:کار با کنترل های سفارشیدر مثال قبلی، مقدار خاصیت Text کنترل سفارشی تنظیم شد. هنگامی که کنترل ایجاد شد، ASP.NET به طور پیش فرض این ویژگی را اضافه کرد. کد زیر پشت فایل کنترل این را نشان می دهد.using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace CustomControls{ [DefaultProperty("Text")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] public class ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"]; return ((s == null) ? "[" + this.ID + "]" : s); } set { ViewState["Text"] = value; } } protected override void RenderContents(HtmlTextWriter output) { output.Write(Text); } }}کد بالا به طور خودکار برای یک کنترل سفارشی تولید می شود. رویدادها و متدها را می توان به کلاس کنترل سفارشی اضافه کرد.مثالاجازه دهید کنترل سفارشی قبلی با نام SeverControl1 را گسترش دهیم. اجازه دهید روشی به نام checkpalindrome به آن بدهیم که به آن قدرت می‌دهد تا برای پالیندروم‌ها را بررسی کند.پالیندروم ها کلمات/اصطلاحاتی هستند که وقتی معکوس می شوند یکسان می نویسند. مثلا مالایایی، مادام، ساراس و غیره.کد را برای کنترل سفارشی گسترش دهید، که باید به صورت زیر باشد:using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace CustomControls{ [DefaultProperty("Text")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] public class ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"]; return ((s == null) ? "[" + this.ID + "]" : s); } set { ViewState["Text"] = value; } } protected override void RenderContents(HtmlTextWriter output) { if (this.checkpanlindrome()) { output.Write("This is a palindrome: <br />"); output.Write("<FONT size=5 color=Blue>"); output.Write("<B>"); output.Write(Text); output.Write("</B>"); output.Write("</FONT>"); } else { output.Write("This is not a palindrome: <br />"); output.Write("<FONT size=5 color=red>"); output.Write("<B>"); output.Write(Text); output.Write("</B>"); output.Write("</FONT>"); } } protected bool checkpanlindrome() { if (this.Text != null) { String str = this.Text; String strtoupper = Text.ToUpper(); char[] rev = strtoupper.ToCharArray(); Array.Reverse(rev); String strrev = new String(rev); if (strtoupper == strrev) { return true; } else { return false; } } else { return false; } } }}زمانی که کد کنترل را تغییر می دهید، باید با کلیک روی Build --> Build Solution راه حل را بسازید تا تغییرات در پروژه شما منعکس شود. یک جعبه متن و یک کنترل دکمه را به صفحه اضافه کنید تا کاربر بتواند متنی را ارائه دهد، وقتی روی دکمه کلیک می‌شود، برای پالیندروم بررسی می‌شود.<form id="form1" runat="server"> <div> Enter a word: <br /> <asp:TextBox ID="TextBox1" runat="server" style="width:198px"> </asp:TextBox> <br /> <br /> <asp:Button ID="Button1" runat="server ="Button1_Click" Text="Check Palindrome" style="width:132px" /> <br /> <br /> <ccs:ServerControl1 ID="ServerControl11" runat="server" Text = "" /> </div></form>کنترل کننده رویداد Click برای دکمه به سادگی متن را از جعبه متن به ویژگی متن کنترل سفارشی کپی می کند.protected void Button1_Click(object sender, EventArgs e){ this.ServerControl11.Text = this.TextBox1.Text;}هنگام اجرا، کنترل با موفقیت پالیندروم ها را بررسی می کند.موارد زیر را رعایت کنید:(1) هنگامی که یک مرجع به کنترل سفارشی اضافه می کنید، به جعبه ابزار اضافه می شود و می توانید مستقیماً از جعبه ابزار مشابه هر کنترل دیگری از آن استفاده کنید.(2) متد RenderContents کلاس کنترل سفارشی در اینجا لغو می شود، زیرا می توانید متدها و رویدادهای خود را اضافه کنید.(3) متد RenderContents پارامتری از نوع HtmlTextWriter را می گیرد که مسئول رندر در مرورگر است.