1 DATA BINDING Hans Gruyaert en Rogier van der Linde2 Inleiding3 Data Binding Koppelen van data uit een databron aan webcontrols Webcontrols: DropDown...
Dropdownlist binden aan Collectie // Category entity class public class Category { public int CategoryID { get; set; } public string CategoryName { get; set; } public string Description { get; set; } public static List GetCategories() { List categories = new List(); using (SqlConnection conn = new ...) { ... } } }
Dropdownlist binden aan Collectie // Category collectie binden aan DropDownList CatList protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List categories = Category.GetCategories(); CatList.DataTextField = "CategoryName"; CatList.DataValueField = "CategoryID"; CatList.DataSource = categories; CatList.DataBind(); } }
RadioButtonList binden met Linq // Categories worden met Linq gebonden aan // een RadioButtonList protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { NorthwindDataContext db = new NorthwindDataContext(); RadioList.DataSource = from c in db.Categories select c; RadioList.DataTextField = "CategoryName"; RadioList.DataValueField = "CategoryID"; RadioList.DataBind(); } }
Data Binding Expressies
Data Binding Expressies Uw keuze: protected void Page_Load(object sender, EventArgs e) { // op het moment dat DataBind wordt uitgevoerd // wordt het geselecteerde item uit de DropDownList // aan de Text property van het Label gekoppeld Keuze.DataBind(); }
View Controls
Iteratieve Controls Iteratieve controls zijn web controls die iteratief over alle items uit de datasource een blok html renderen Voorbeelden van dergelijke webcontrols zijn:
GridView,
ListView, Repeater: weergeven van multiple records DetailsView, FormView: weergeven van één record
GridView Gebruik je om data in tabelvorm weer te geven Functionaliteit: sorteren, pagen, template-columns, editeren, etc. Voordeel: snel resultaat Nadeel: eenheidsworst, je zit vast aan html
GridView
GridView binding NorthwindDataContext db = new NorthwindDataContext(); var productsInCategory = from p in db.Products where p.CategoryID == catID select new { ProductID = p.ProductID, Name = p.ProductName, Catagory = p.Category.CategoryName, Price = p.UnitPrice }; ProductOverview.DataSource = productsInCategory; ProductOverview.DataBind();
DetailsView Gebruik je om details van één record weer te geven Functionaliteit: edit, insert, delete, etc. Voordeel: snel resultaat Nadeel: weinig mogelijkheden om output te tweaken, html
DetailsView
Details for
<EditItemTemplate>
DetailsView binding NorthwindDataContext db = new NorthwindDataContext(); var productDetails = from p in db.Products where p.ProductID == productID select p; DetailsView.DataSource = productDetails; DetailsView.DataBind(); if (DetailsView.CurrentMode == DetailsViewMode.Edit) { DropDownList categoryList = (DropDownList)DetailsView.Rows[2].Cells[1].Controls[1]; var categories = from c in db.Categories select c; categoryList.DataSource = categories; categoryList.DataBind(); categoryList.SelectedValue = ((Product)DetailsView.DataItem).CategoryID.ToString(); }
ListView Tegenhanger van de GridView maar met volledige controle over de gerenderde html Functionaliteit: templates, edit, paging met DataPager, etc. Voordeel:
ListView
Order <%# Eval("OrderID") %>: <%# Eval("TotalPrice") %>
Ordered by <%# Eval("CompanyName") %> on <%# ((DateTime)Eval("OrderDate")).ToShortDateString() %>
> details
FormView Tegenhanger van de DetailsView maar met meer controle over de gerenderde html Functionaliteit: edit, delete, insert, etc. Voordeel: meer vrijheid in de markup dan met een DetailsView diir gebruik te maken van templates Nadeel: er wordt toch een
gerenderd
FormView
Order <%# Eval("OrderID") %> for customer <%# Eval("Customer")%>
Product
Quantity
Unit Price
Total
<%# Eval("ProductName") %>
<%# Eval("Quantity") %>
<%# Eval("UnitPrice") %>
<%# Eval("Total") %>
...
FindControl Alle controls genest in een ViewControls kunnen niet rechtstreeks met hun ID aangesproken worden Om die controls toch te ‘vinden’ gebruik je de FindControl methode en geef je er de lokale ID aan mee
FormView binding NorthwindDataContext db = new NorthwindDataContext();` var order = from o in db.Orders ... ; OrderDetails.DataSource = order; OrderDetails.DataBind(); // geneste ListView kan je niet rechtstreeks aanspreken met z’n // ID ProductDetails, in plaats daarvan wordt ze gevonden met de // FindControl methode: ListView productDetails = (ListView)OrderDetails.FindControl("ProductDetails"); var products = from o in db.Order_Details ... ; productDetails.DataSource = products; productDetails.DataBind();