Кратко съдържание


Свързване с данни (Data binding)



страница31/33
Дата23.07.2016
Размер10.53 Mb.
#1889
1   ...   25   26   27   28   29   30   31   32   33

Свързване с данни (Data binding)


ASP.NET предлага нов декларативен синтаксис за свързване с данни (data binding). Този изключително гъвкав синтаксис позволява свързването не само с бази от данни, но и със свойства, колекции, изрази, дори резултати от методи. В HTML-подобния код на уеб формите свързването на данните става в секции от вида <%# %>. Ето няколко примера:

  • Със свойство:

    Customer: <%# custID %>

  • С колекция:

    Orders: ' runat="server">

  • С израз:

    Contact: <%# ( customer.First Name + " " + customer.LastName ) %>

  • С резултат от метод:

Outstanding Balance: <%# GetBalance(custID) %>

Как работи методът DataBind(…)?


Въпреки че изглежда подобен на <% Response.Write(customer.Name) %> или <%= customer.Name %>, поведението на методa е различно. Докато първите два блока се изпълняват когато страницата генерира HTML от Render(…) метода, ASP.NET изразите за свързване с данни се изпълняват при извикването на DataBind(…). Ако методът не се извика, целият регион <%#... %> се игнорира.

DataBind(…) е метод на класа Page и на сървър контролите. Когато се извика DataBind(…) на родителската контрола, той се извиква каскадно и за всички нейни деца. Извикването на DataBind(…) на вградения обект Page (Page.DataBind(…) или по-просто DataBind(…)), предизвиква оценя­ването на всички изрази (<%#... %>) за свързване с данни. Най-често DataBind(…) се извиква от Page_Load събитието:

void Page_Load(Object sender, EventArgs e)

{

Page.DataBind();



}

Може да се използва почти навсякъде в декларативната част на .aspx страница, стига да се връща подходящ тип данни. В някои случаи се налага преобразуване на данните.

Свързване на контроли с данни – пример


Първият пример за свързване с данни, който ще разгледаме, работи директно със свойства на страницата. Ето кода:





Свързване с данни (DataBinding)

към свойство на страницата



Customer: |<%# custID %>|


Open Orders: |<%# orderCount %>|









Ето и кода в code-behind страницата:

void Page_Load(Object sender, EventArgs e)

{

Page.DataBind();



}
string custID

{

get



{

return "Porsche";

}

}
int orderCount



{

get


{

return 911;

}

}


Ето го резултатът:

Важно е да извикаме метода Page.DataBind(). Ако го закоментираме, ето какво се случва:



Както виждаме, нищо не е изписано между вертикалните черти.

В следващия пример една контрола ще достъпва данни от друга контрола. В конкретния случай етикет (Label) ще изписва избрания щат от падащ списък. Ето го кода:



Свързване с данни (DataBinding) към свойство на друга

сървърна контрола





CA

IN

KS

MD

MI

OR

TN

UT



runat="server" ID="ButtonSubmit" Name="Button1" />

Selected State:

'

runat=server ID="LabelState" Name="LabelState"/>









Разбира се, в Page_Load метода извикваме DataBind(…). Резултатът е:

В третия пример ще заредим падащ списък от масив. Нека имаме уеб форма с падащ списък на нея. За краткост ще дадем кода само от code-behind класа:



void Page_Load(Object Sender, EventArgs E)

{

if (!Page.IsPostBack)



{

ArrayList values = new ArrayList();


values.Add ("IN");

values.Add ("KS");

values.Add ("MD");

values.Add ("MI");

values.Add ("OR");

values.Add ("TN");


DropDownListCountries.DataSource = values;

DropDownListCountries.DataBind();

}

}
void ButtonSubmit_Click(Object sender, EventArgs e)



{

LabelChosen.Text = "You chose: " +

DropDownListCountries.SelectedItem.Text;

}


От този код падащият списък се зарежда с няколко щата. Вторият метод изписва в етикет избрания щат.

Сега ще демонстрираме показване на данни в DataGrid от табличен източник на данни (в случая DataView):



<%@ Import namespace="System.Data" %>










Свързване с данни (DataBinding) на

DataView













При компилирането му се показват данните в браузъра:

В последния пример ще направим свързване на данни с изрази (expressions) и методи, които ще извикваме параметрично:












Свързване с данни (Databinding) към методи и изрази




Number Value: <%# Container.DataItem %>

Even/Odd: <%# EvenOrOdd((int) Container.DataItem) %>











Този път данните се показват в DataList, в шаблона, на който се показват данните от целочислен масив и извикванията от метод. На метода се подава поредната целочислена стойност. Забележете гъвкавостта на работата с данни – можем да вземем поредния запис от база от данни и на негова основа да покажем допълнителни стойности или изцяло променени данни.





Сподели с приятели:
1   ...   25   26   27   28   29   30   31   32   33




©obuch.info 2024
отнасят до администрацията

    Начална страница