نظرة عامة حول ربط بيانات ASP.NET

تشير هذه المقالة إلى مكتبة فئات Microsoft.NET Framework مساحات الأسماء التالية:
  • System.Data
  • System.Data.SqlClient

ملخص

توفر هذه المقالة مقدمة إلى ربط بيانات ASP.NET.

للحصول على نظرات عامة حول ASP.NET إضافية، راجع مقالة "قاعدة معارف Microsoft" التالية:
خارطة ASP.NET 305140

مزيد من المعلومات

مع ربط بيانات ASP.NET، يمكنك ربط أي عنصر تحكم خادم لخصائص بسيطة، مجموعات والتعبيرات و/أو أساليب. عند استخدام ربط البيانات، لديك مرونة أكبر عند استخدام البيانات من قاعدة بيانات أو وسائل أخرى.

تتناول هذه المقالة الموضوعات ربط البيانات التالية:

أساسيات ربط البيانات

بناء الجملة < % # % >

يقدم ASP.NET بناء الجملة التعريفي الجديد، < % # % >. بناء الجملة هذا هو الأساس لاستخدام ربط البيانات في صفحة.aspx. يجب تضمين كافة تعبيرات ربط البيانات داخل هذه الأحرف. تتضمن القائمة التالية أمثلة ربط بسيط للبيانات من مصادر متعددة:
  • الخاصية البسيطة (بناء الجملة لعميل):
    <%# custID %>
  • مجموعة (بناء الجملة لأمر):
    <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
  • التعبير (بناء الجملة لجهة اتصال):
    <%# ( customer.First Name + " " + customer.LastName ) %>
  • نتيجة الأسلوب (بناء الجملة للرصيد غير المسدد):
    <%# GetBalance(custID) %>
في الأمثلة السابقة، تشير علامات تمييز السطر < % # % > فيها المعلومات من مصدر بيانات محدد لوضعها في صفحة aspx. يستخدم المثال التالي ربط بيانات عنصر تحكم خادم ويب TextBox :
<asp:textbox id=txt text="<%# custID %>" runat=server />
لمزيد من المعلومات حول بناء الجملة لربط البيانات، راجع وثائق.NET Framework برامج تطوير مجموعة (SDK) التالية:
بناء جملة تعبير ربط البيانات
http://msdn2.microsoft.com/en-us/library/bda9bbfx(vs.71).aspx

Page.DataBind() مقابل Control.DataBind()

بعد تحديد مصادر البيانات معينة وتعيين الكائنات على الصفحة.aspx، يجب ربط البيانات إلى مصادر البيانات هذه. يمكنك استخدام أسلوب Control.DataBind أو Page.DataBind لربط البيانات إلى مصادر البيانات.

يعمل كلا الأسلوبين بالمثل. والفرق الرئيسي ربط كافة مصادر البيانات إلى عناصر تحكم الخادم الخاصة بهم بعد استدعاء الأسلوب Page.DataBind . يتم تقديم أية بيانات لعنصر التحكم حتى استدعاء أما الأسلوب DataBind عنصر تحكم خادم الويب أو حتى يمكنك استدعاء الأسلوب Page.DataBind مستوى الصفحة بشكل صريح. بشكل عام، يتم استدعاء Page.DataBind (أو DataBind) من حدث Page_Load .

لمزيد من المعلومات حول أسلوب DataBind ، راجع وثائق SDK إطار عمل.NET التالية: أسلوب Control.DataBind
http://msdn.microsoft.com/en-us/library/w5e5992d.aspx

عناصر تحكم ربط البيانات القائمة

تكون عناصر تحكم القائمة خاصة عناصر تحكم خادم الويب التي يمكنك الربط إلى مجموعات. يمكنك استخدام عناصر التحكم هذه لعرض صفوف من البيانات في تنسيق قالب مخصص. عرض كافة عناصر القائمة مصدر البيانات وخصائص DataMember ، التي تستخدم لربط المجموعات.

ربط عناصر التحكم هذه خاصية مصدر البيانات الخاصة بأي مجموعة يدعم IEnumerableأو ICollectionواجهة إيليستسورسي .

التحكم repeater

عنصر التحكم Repeater قائمة القوالب، ربط البيانات. عنصر التحكم Repeater "لوكلس"؛ أي أنه ليس لديه أي تخطيط مضمن أو أنماط. ولذلك، يجب أن تصرح كافة HTML التخطيط والتنسيق والأنماط علامات في قوالب عنصر التحكم.

نماذج التعليمات البرمجية التالية توضح كيفية استخدام عنصر تحكم قائمة واحدة، التحكم Repeater ، لعرض البيانات:

ملاحظة: يجب تعديل معلمات سلسلة الاتصال حسب الضرورة للبيئة الخاصة بك.

Visual Basic.NET
<%@ Page Language="vb" %><%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)

Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
"database=pubs;Integrated Security=SSPI")
Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
Dim ds As DataSet = New DataSet()
cmd.Fill(ds)
Repeater1.DataSource = ds
Repeater1.DataBind()

End Sub
</script>
<html>
<body>
<form id="Form1" method="post" runat="server">
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>

Visual C#.NET
<%@ Page language="c#" %><%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
void Page_Load(Object sender, EventArgs e)
{
SqlConnection cnn = new
SqlConnection("server=(local);database=pubs;Integrated Security=SSPI");
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn);
DataSet ds = new DataSet();
da.Fill(ds, "authors");
Repeater1.DataSource = ds.Tables["authors"];
Repeater1.DataBind();
}
</script>
<html>
<body>
<form id="WebForm2" method="post" runat="server">
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>

Visual J#.NET
<%@ Page language="VJ#" %><%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
void Page_Load(Object sender, EventArgs e)
{
SqlConnection cnn = new SqlConnection("server=(local);database=pubs;Integrated
Security=SSPI");
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn);
DataSet ds = new DataSet();
da.Fill(ds, "authors");
DataTableCollection dtc = ds.get_Tables();
int index = dtc.IndexOf("authors");
Repeater1.set_DataSource(dtc.get_Item(index));
Repeater1.DataBind();
}
</script>
<html>
<body>
<form id="WebForm2" method="post" runat="server">
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>

لمزيد من المعلومات حول عنصر التحكم Repeater ، راجع وثائق SDK إطار عمل.NET التالية:
عنصر تحكم خادم الويب repeater
http://msdn.microsoft.com/en-us/library/x8f2zez5.aspx

عنصر التحكم

فئة قائمة البيانات عبارة عن قائمة ميزة الغنية، القوالب، ربط البيانات. يمكنك تعديل قوالب لتخصيص عنصر التحكم هذا. بعكس عنصر التحكم Repeater DataList يعتمد عرض اتجاهات ويمكن أن تجعل في جدول HTML بشكل اختياري في وقت التشغيل.

لمزيد من المعلومات حول عنصر تحكم، راجع وثائق SDK إطار عمل.NET التالية:
عنصر تحكم خادم الويب dataList
http://msdn.microsoft.com/en-us/library/9cx2f3ks(VS.85).aspx

عنصر تحكم DataGrid

عنصر تحكم DataGrid شبكة متميز تماما، متعدد الأعمدة، ربط البيانات. لتخصيص تخطيط الأعمدة الفردية في DataGrid، يمكنك تعيين نوع العمود إلى "القوالب" وتعديل القوالب للعمود. يمكن أن تجعل عنصر التحكم DataGrid دون القوالب، مما يجعل هذا التحكم المثالي لسيناريوهات التقارير. يدعم DataGrid أيضا التحديد والتحرير والحذف، والترحيل والفرز حسب العمود والأعمدة الزر.

لمزيد من المعلومات حول عنصر تحكم DataGrid ، راجع وثائق SDK إطار عمل.NET التالية:
عنصر تحكم خادم الويب DataGrid
http://msdn.microsoft.com/en-us/library/aa710742(VS.71).aspx

الوصول إلى البيانات

يصف هذا القسم كيفية الوصول إلى البيانات من قاعدة بيانات وربط البيانات إلى عناصر تحكم القائمة. يمكنك استخدام مجموعة البيانات أو فئة DataReader للحصول على بيانات من قاعدة بيانات.

فئة مجموعة البيانات

تحتوي مجموعة البيانات على تمثيل كامل للبيانات، بما في ذلك العلاقات بين الجداول وترتيب البيانات، بنية الجدول. فئات مجموعة البيانات تتسم بالمرونة الكافية لتخزين أي نوع من المعلومات من قاعدة بيانات إلى ملف لغة توصيف الموسعة (XML). فئات مجموعة البيانات عديم الجنسية؛ ، يمكنك تمرير هذه الفئات من العميل إلى ملقم دون ربط موارد الملقم الاتصال. التعليمة البرمجية التالية يوضح كيفية استخدام مجموعة البيانات لربط البيانات إلى عنصر تحكم:

ملاحظة: يجب تعديل معلمات سلسلة الاتصال حسب الضرورة للبيئة الخاصة بك.

Visual Basic.NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
Dim ds As DataSet = New DataSet()
cmd.Fill(ds)
MyRepeater.DataSource = ds
MyRepeater.DataBind()

Visual C#.NET
SqlConnection cnn = new SqlConnection("server=(local);                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn);
DataSet ds = new DataSet();
da.Fill(ds);
MyRepeater.DataSource = ds;
MyRepeater.DataBind();

Visual J#.NET
SqlConnection cnn = new SqlConnection("server=(local);                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn);
DataSet ds = new DataSet();
da.Fill(ds);
MyRepeater.set_DataSource(ds);
MyRepeater.DataBind();

لمزيد من المعلومات حول فئة مجموعة البيانات ، راجع وثائق SDK إطار عمل.NET التالية:

فئة DataReader

على العكس من ذلك، إذا احتجت لعرض البيانات التي سيتم تقديمها (وليس تغيير)، فئة DataReader قد يكون حل أفضل. على سبيل المثال، من الأفضل استخدام DataReader لعنصر تحكم القائمة المنسدلة سبب DataReader مؤشر بيانات فقط. التعليمة البرمجية التالية يوضح كيفية استخدام فئة SqlDataReader لربط البيانات إلى عنصر تحكم:

Visual Basic.NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlCommand = New SqlCommand("select * from authors", cnn)

cnn.Open()
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection)
MyRepeater.DataBind()

Visual C#.NET
SqlConnection cnn = new SqlConnection("server=(local);                                       database=pubs;Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand("select * from authors", cnn);

cnn.Open();
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection);
MyRepeater.DataBind();

Visual J#.NET
SqlConnection cnn = new SqlConnection("server=(local);                                       database=pubs;Integrated Security=SSPI"); 

SqlCommand cmd = new SqlCommand("select * from authors", cnn);

cnn.Open();
MyRepeater.set_DataSource(cmd.ExecuteReader(CommandBehavior.CloseConnection));
MyRepeater.DataBind();

لمزيد من المعلومات حول الوصول الفئة والبيانات SqlDataReader مع ASP.NET، راجع المواضيع التالية في وثائق.NET Framework SDK:

ربط في قائمة قوالب عنصر التحكم

يمكنك استخدام قوالب في قائمة عناصر تحكم الربط وتخصيص السجلات الفردية لمصدر البيانات. يتضمن هذا المقطع ثلاث طرق للقيام بذلك.

طريقة DataBinder.Eval

عندما يعمل مصدر البيانات مع البيانات التي يتم إرجاعها من قاعدة بيانات، مصدر البيانات قد تحتوي على أجزاء متعددة من المعلومات. يمكنك استخدام الأسلوب DataBinder.Eval العام لإرجاع البيانات. في نموذج التعليمات البرمجية التالي, يتم إرجاع الحقل "au_id" من مصدر البيانات لكائن حاوية:
<%# DataBinder.Eval(Container.DataItem,"au_id") %>
لمزيد من المعلومات حول أسلوب DataBinder.Eval ، راجع وثائق SDK إطار عمل.NET التالية:

الأنواع الصريحة

إذا كنت تحتاج إلى تحكم أكثر، استخدام الأنواع الصريحة. تحويل صريح يستخدم الكلمة أساسية نوع تحويل. تعمل هذه الكلمات الأساسية كدالات، لكن المحول البرمجي ينشئ التعليمات البرمجية المضمنة. لذلك، يتم تنفيذ أسرع قليلاً من استدعاء دالة. استخدام نماذج التعليمة البرمجية التالية الأنواع الصريحة:


Visual Basic.NET
' DataTable as the DataSource<%# CType(Container.DataItem, System.Data.DataRowView)("au_id") %>

' DataReader as the DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)("au_id") %>

' DataReader as the DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)(0) %>

Visual C#.NET
// DataTable as the DataSource<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>

Visual J#.NET
// DataTable as the DataSource<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>

لاحظ أن السابق عينات استخدام أما DataTable، ومجموعة فرعية من مجموعة البياناتأو DataReader كمصدر بيانات.

حدث إيتيمداتابوند

يمكنك أيضا استخدام الحدث إيتيمداتابوند لعنصر التحكم بربط البيانات. يحدث هذا الحدث عند عنصر البيانات المرتبطة بعنصر التحكم. يحدد نموذج التعليمات البرمجية التالي HTML عنصر تحكم مكرر قالب العنصر:
<asp:repeater id=rptr runat=server>   <itemtemplate>
<asp:label id=lblAuthorID runat=server />
</itemtemplate>
</asp:repeater>

الأساليب التالية مطلوبة في الصفحة الخاصة بك:

Visual Basic.NET
public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  
'TODO: Retrieve data from a database,
'and bind the data to a list control.

End Sub

public Sub rptr_OnItemDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptr.ItemDataBound
Dim rec As DataRowView
rec = e.Item.DataItem

'Make sure that you have the data.
If Not IsDBNull(rec) Then
Dim l1 As Label
l1 = e.Item.FindControl("lblAuthorID")
l1.Text = rec("au_id").ToString()
End If
End Sub

Visual C#.NET
public void Page_Init(object sender, System.EventArgs e){
rptr.ItemDataBound += new RepeaterItemEventHandler(rptr_OnItemDataBound);
}
public void Page_Load(object sender, System.EventArgs e)
{
// TODO: Retrieve data from a database,
// and bind the data to a list control.
}
public void rptr_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
e.Item.DataItem;
if(rec!=null) //Make sure that you have the data.
{
Label l1 = (Label)e.Item.FindControl("lblAuthorID");
l1.Text = rec["au_id"].ToString();
}
}

Visual J#.NET
public void Page_Init(Object sender, System.EventArgs e){
rptr.add_ItemDataBound(new RepeaterItemEventHandler(rptr_OnItemDataBound));
}
private void Page_Load(Object sender, System.EventArgs e)
{
// TODO: Retrieve data from a database,
// and bind the data to a list control.
}
public void rptr_OnItemDataBound(Object sender, RepeaterItemEventArgs e)
{
System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
e.get_Item().get_DataItem();
if (rec != null) //Make sure that you have the data.
{
Label l1 = (Label)e.get_Item().FindControl("lblAuthorID");
l1.set_Text(((rec.get_Item("au_id")).ToString()));
}
}

خصائص

رقم الموضوع: 307860 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

Microsoft ASP.NET 1.0, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual J# .NET 2003 Standard Edition, Microsoft ASP.NET 1.1, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition

تعليقات