a) Xây dựng một DataColumn
Tiếp tục với project SimpleDataSet cho cột CarID là khóa chính của bảng, cấu hình đối tượng DataColumn là read-only, duy nhất và không null (sử dụng thuộc tính ReadOnly, Unique và AllowDBNull).
private void MakeTable()
{
DataTable table = new DataTable("Product"); DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Decimal"); column.AllowDBNull = false;
column.Caption = "Price"; column.ColumnName = "Price"; column.DefaultValue = 25; table.Columns.Add(column); DataRow row;
for(int i = 0; i < 7; i++)
{
row = table.NewRow(); row["Price"] = i + 1; table.Rows.Add(row);
}
}
b) Cho phép các field tăng tự động
Một khía cạnh của DataColumn có thể cấu hình tăng tự động (autoincrement). Một cột autoincrementing được sử dụng để bảo đảm rằng khi một hàng mới được thêm vào một bảng đã cho, giá trị của cột này được gán một cách tự động trên cơ sở tăng dần.
Để làm việc này sử dụng những thuộc tính AutoIncrement, AutoIncrementSeed và AutoIncrementStep. Cho code sau cập nhật cấu trúc của carIDColumn DataColumn
private void AddAutoIncrementColumn()*-
{
DataColumn column = new DataColumn(); column.DataType = System.Type.GetType("System.Int32"); column.AutoIncrement = true;
column.AutoIncrementSeed = 700;
column.AutoIncrementStep = 7;
DataTable table = new DataTable("table"); table.Columns.Add(column);
}
Ở đây, đối tượng carIDColumn đã được cấu hình để bảo đảm rằng những dòng có giá trị tăng là 1. Vì giá trị khởi đầu đã được thiết lập là 0, nên cột này sẽ được đánh số 0, 1, 2, 3,…
4.5.7. Lớp DataRow
Một colection của các đối tượng DataColumn thể hiện mô hình của một DataTable. Còn một colection của các kiểu DataRow đại diện cho dữ liệu thực tế trong bảng. Sử dụng những thành phần của lớp DataRow có thể insert, remove và thao tác những giá trị trong bảng.
Các thành phần chính của kiểu DataRow.
Ý nghĩa | |
Hasit() EndEdit() CancelEdit() | Những phương thức này bắt đầu, kết thúc, hoặc hủy bỏ một thao tác hiệu chỉnh trên một đối tượng DataRow. |
Delete() | Phương thức này đánh dấu hàng sẽ được remove khi phương thức AcceptChanges() được gọi. |
IsNull() | Phương thức này đưa ra một giá trị cho biết có phải cột được xác định chứa một giá trị null hay không. |
Có thể bạn quan tâm!
- Kết Nối Đến Cơ Sở Dữ Liệu Và Đọc Dữ Liệu
- Lập trình trên nền Web - 27
- Lập trình trên nền Web - 28
- Kết Quả Hiển Thị Trên Gridview
- Lập trình trên nền Web - 31
- Lập trình trên nền Web - 32
Xem toàn bộ 285 trang tài liệu này.
4.5.8. Lớp DataTable
Kiểu DataTable định nghĩa một số lớn các thành phần, nhiều thành phần của nó giống về tên và chức năng của DataSet. Bảng 1.12 mô tả một số thành phần cốt lòi của kiểu DataTable ngoài Rows và Columns.
Các thành phần chính của kiểu DataTable.
Ý nghĩa | |
CaseSensitive | Cho biết chuỗi bên trong bảng có phân biệt hoa/thường hay không. Giá trị mặc định là false. |
ChildRelations | Trả về tập hợp của những quan hệ con cho DataTable này (nếu có) |
Constraints | Đưa ra tập hợp của những ràng buộc của bảng. |
Copy() | Phương thức sao chép mô hình và dữ liệu của một DataTable đã cho vào trong một thể hiện mới. |
DataSet | Đưa ra DataSet mà chứa bảng này (nếu có) |
DefaultView | Đưa ra một view mặc định của bảng. |
MinimumCapacity | Đưa ra hay thiết lập số lượng hàng ban đầu trong bảng (mặc định là 5). |
ParentRelations | Đưa ra tập hợp của những quan hệ cha cho DataTable này. |
PrimaryKey | Thiết lập những cột mà có chức năng khóa chính cho bảng dữ liệu. |
RemotingFormat | Cho phép định nghĩa cách DataSet xuất nội dung của nó ( nhị phân hay XML). |
TableName | Thiết lập tên của bảng. |
Ví dụ:
DataTable table = new DataTable(“SinhVien”);
table.Columns.Add(new DataColumn(“MSSV”, Type.GetType(“Int32”)); table.Columns.Add(new DataColumn(“HoTen”, Type.GetType(“string”)); table.PrimaryKey = new DataColumn[] { table.Columns[“MSSV”] }; DataRow row = table.NewRow();
row[“MSSV”] = 123;
row[“HoTen”] = “Nguyễn Văn A”; table.Rows.Add(row);
4.6. Data Binding
4.6.1. Giới thiệu DataBinding
ASP.NET cung cấp cho 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 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 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, 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 cơ sở dữ liệu ….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.
4.6.2. Data Binding
a) 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ỳ.
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.
<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>
Phần mã lệnh thực thi trang SimpleDataBinding.aspx.cs:
public partial class SimpleDataBinding : System.Web.UI.Page
{
protected int TransactionCount;
protected void Page_Load(object sender, EventArgs e)
{
TransactionCount = 10; this.DataBind();
}
}
b) 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.
<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>
Phần mã lệnh thực thi trang ListDataBinding.aspx.cs:
public partial class ListDataBinding : System.Web.UI.Page
{
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();
}
}
Ví dụ: Tạo trang DataSetBinding.aspx liên kết dữ liệu ListBox với đối tượng ADO.NET là DataSet
Phần mã lệnh thiết kế trang DataSetBinding.aspx:
<form id="form1" runat="Server">
<div>
<asp:ListBox ID="lstUser" runat="Server" Height="152px" Width="192px"></asp:ListBox>
</div>
</form>
Phần mã lệnh thực thi trang DataSetBinding.aspx.cs.
public partial class DataSetBinding : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataSet dsInternal = new DataSet(); dsInternal.Tables.Add("Users"); dsInternal.Tables["Users"].Columns.Add("Name"); dsInternal.Tables["Users"].Columns.Add("Country"); DataRow rowNew = dsInternal.Tables["Users"].NewRow(); rowNew["Name"] = "John";
rowNew["Country"] = "Uganda"; dsInternal.Tables["Users"].Rows.Add(rowNew); rowNew = dsInternal.Tables["Users"].NewRow(); rowNew["Name"] = "Samantha"; rowNew["Country"] = "Belgium"; dsInternal.Tables["Users"].Rows.Add(rowNew); rowNew = dsInternal.Tables["Users"].NewRow(); rowNew["Name"] = "Rico";
rowNew["Country"] = "Japan"; dsInternal.Tables["Users"].Rows.Add(rowNew); lstUser.DataSource = dsInternal.Tables["Users"]; lstUser.DataTextField = "Name"; lstUser.DataSource = dsInternal; lstUser.DataMember = "Users"; lstUser.DataTextField = "Name"; this.DataBind();
}
4.6.3. Các điều khiển Data Source
a) Giới thiệu về DataSource Controls
Sử dụng các đối tượng truy xuất dữ liệu (như DataReader) kết hợp với vòng lặp (while (Dr.DataRead() == true)) để duyệt và đọc toàn bộ bản ghi lấy về. Tuy nhiên một cách khác để đọc dữ liệu mà không phải viết code đó là dùng các điều khiển Data Source. Hiện tại ASP.NET cung cấp một số Data Source Controls sau đây: