Ngôn ngữ ASP.NET - Data Binding

Giới thiệu Data Binding

ASP.NET cung cấp cho chúng ta rất nhiều điều khiển để cho phép hiển thị cũng như tiếp   nhận thông tin từ người dùng. Có những điều khiển cho phép chúng ta hiển thị những thông tin tĩnh (Static – tức là giá trị xác định được ngay khi lập  trình),  một  số  hiển  thị  được  cả những thông tin động (Dynamic  - tức là được  tính toán khi chạy chương trình). Để việc    hiển thị thông tin động này một cách đơn giản và nhanh chóng, ASP.NET cung  cấp  cho chúng ta một đặc tính gọi là "Data Binding" (kết nối dữ liệu).
Data Binding là một kỹ thuật kết nối dữ liệu với những đối tượng. Sử dụng data binding, bạn có thể nối dữ liệu trong một nguồn dữ liệu đến một đối tượng người dùng. Mọi việc thay đổi trên các đối tượng giao diện người dùng có thể trực tiếp được cập nhật vào nguồn dữ liệu.
Từ "data" cũng cần phải được hiểu theo nghĩa rộng, nó không nhất thiết phải là cái gì đó liên quan đến Cơ sở dữ liệu như ta thường nghĩ mà có thể là một thuộc tính, một mảng, một tập hợp, một danh sách, một trường dữ liệu trong bảng CSDL….hay tổng quát là một biểu thức  trả về giá trị.
Có hai kiểu binding dữ liệu đó là Simple Data Binding và Repeated Data Binding. Chúng ta quan tâm nhiều đến kiểu thứ hai – Repeated Data Binding - với nguồn dữ liệu được truy xuất từ cơ sở dữ liệu.

Các dạng Data Binding
1. Dạng kết nối dữ liệu đơn (Single Data Binding)
Trong ASP.NET, có thể gắn một giá trị đơn lẻ vào trang được gọi là Single Data Binding. Cú pháp để gắn dữ liệu đơn vào trang như sau: <%# biểu_thức %>
Trong đó: biểu_thức có thể là một hằng, một biến, một hàm, một biểu thức hoặc có thể là một thuộc tính khác.
Một số cách dùng dạng kết nối dữ liệu đơn: 

Hằng số:	<%# 20 %> <br />
Hằng xâu: <%# "Xin chào" %> <br /> Biểu thức: <%# 10+5 %> <br />
Hàm :	<%# "Sin(3.14/2) = " + Math.Sin(3.14/2) %> <br /> Thuộc tính khác: <%# "Tiêu đề của trang là " + this.Title %>

Có thể gắn kết tới một biểu thức, một biến, thuộc tính … bất kỳ.

Chú ý: Trong thủ tục Page_Load cần thêm lệnh this.DataBind() để thực sự gắn kết.

Ví dụ : Tạo trang SimpleDataBinding.aspx minh họa dạng kết nối dữ liệu đơn giản.
Phần mã lệnh thiết kế trang SimpleDataBinding.aspx trong đó có sử dụng dạng kết nối dữ liệu đơn giản với biến TransactionCount.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SimpleDataBinding.aspx.cs" Inherits="SimpleDataBinding" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Label id="lblDynamic" runat="server" Font-Size="X-Large" >
 	There were <%# TransactionCount %> transactions today.
 	I see that you are using <%# Request.Browser.Browser %>.
 	</asp:Label>
</div>

    </form>
</body>
</html>

Phần mã lệnh thực thi trang SimpleDataBinding.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class SimpleDataBinding : System.Web.UI.Page
{
    protected int TransactionCount;
    protected void Page_Load(object sender, EventArgs e)
    {
        TransactionCount = 10;

        // Now convert all the data binding expressions on the page.
        this.DataBind();

    }
}

Kết quả thực thi trang SimpleDataBinding.aspx:

2. Dạng kết nối dữ liệu có sự lặp lại (Repeated Data Binding)
Có rất nhiều trường hợp dữ liệu cần hiển thị là một danh sách (như mảng, bảng, DataReader,…) hay tổng quát là một tập hợp các mục (Collection  Items  ). Trong trường   hợp như vậy, hoàn toàn có thể dùng cơ chế DataBinding trong ASP.NET để gắn kết quả đó vào một điều khiển dạng danh sách (như ListBox, DropdownList, CheckboxList,…) để hiển thị mà không cần phải viết nhiều dòng code.
Các điều khiển cho phép gắn kết dữ liệu thường có ba thuộc tính với các ý nghĩa như sau:
DataSource: Là thuộc tính để chỉ đến nguồn dữ liệu  cần gắn kết.  Nguồn dữ liệu này phải  là một tập hợp. Ví dụ: DataTabe, Array,…
DataSourceID: Chỉ đến một đối tượng cung cấp nguồn dữ liệu. Có thể sử dụng hoặc thuộc tính DataSourceID hoặc DataSource nhưng không được cả hai.
DataTextField: Cho biết là gắn kết với trường nào của mỗi mục dữ liệu.
Ví dụ : Tạo trang ListDataBinding.aspx minh họa kết nối dữ liệu dạng Repeated Data Binding
Phần mã lệnh thiết kế trang ListDataBinding.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ListDataBinding.aspx.cs" Inherits="ListDataBinding" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
<div>
<asp:ListBox id="MyListBox" runat="server" Width="197px" Height="193px"></asp:ListBox>
<br /><br />
<select id="MyHTMLSelect" size="1" runat="server"/>
<br /><br />
<asp:DropDownList id="MyDropDownListBox" runat="server" Width="248px" Height="22px"></asp:DropDownList>
<br /><br />
<asp:CheckBoxList id="MyCheckBoxList" runat="server" Width="201px" Height="157px"></asp:CheckBoxList>
<br /><br />
<asp:RadioButtonList id="MyRadioButtonList" runat="server" Width="249px" Height="158px"></asp:RadioButtonList>
</div>
</form>

</body>
</html>

Phần mã lệnh thực thi trang ListDataBinding.aspx.cs:

 protected void Page_Load(object sender, EventArgs e)
    {
        List<string> fruit = new List<string>(); 
        fruit.Add("Kiwi");
        fruit.Add("Pear");
        fruit.Add("Mango"); 
        fruit.Add("Blueberry"); 
        fruit.Add("Apricot");
        fruit.Add("Banana"); 
        fruit.Add("Peach");
        fruit.Add("Plum");
        MyListBox.DataSource = fruit; 
        MyDropDownListBox.DataSource = fruit; 
        MyHTMLSelect.DataSource = fruit; 
        MyCheckBoxList.DataSource = fruit; 
        MyRadioButtonList.DataSource = fruit;
        // Activate the binding.
        this.DataBind();

    }

Kết quả thực thi cho thấy rõ sự kết nối dữ liệu từ tập dữ liệu List<string> đến các điều khiền dữ liệu của ASP.NET :