Chương 6: Điều khiển liên kết dữ liệu
6.3.6. Lập trình sử dụng DataList
Xây dựng trang web nghe nhạc đơn giản với cơ sở dữ liệu cho sẵn Hãy thực hiện các yêu cầu sau sử dụng DataList control:
a) Hiển thị danh sách tất cả bài hát (DSBaiHat.aspx) b) Hiển thị chi tiết thông tin bài hát (CTBaiHat.aspx) Cơ sở dữ liệu:
a) Hiển thị danh sách tất cả bài hát (DSBaiHat.aspx)
Mã nguồn minh hoạ:
54
DSBaiHat.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DSBaiHat.aspx.cs"
Inherits="DSBaiHat" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="dlBaiHat" runat="server" GridLines="Both">
<HeaderTemplate>
<td>Mã Bài Hát</td>
<td>Tên Bài Hát</td>
<td>Tên Nhạc Sĩ Sáng Tác</td>
</HeaderTemplate>
<ItemTemplate>
<td><%#DataBinder.Eval(Container.DataItem,"MaBaiHat") %></td>
<td><a href='<%#"CTBaiHat.aspx?MaBaiHat="+
DataBinder.Eval(Container.DataItem,"MaBaiHat")
%>'>
<%#DataBinder.Eval(Container.DataItem,"TenBaiHat")
%></a></td>
<td><%#DataBinder.Eval(Container.DataItem,"TenNhacSi") %></td>
</ItemTemplate>
</asp:DataList>
</div>
</form>
</body>
</html>
Ghi chú:
- Biểu thức databinding <%# biểu_thức %> được dùng để bổ sung thêm đoạn mã nguồn trong trang web của ngôn ngữ như VB.NET, C#.
- DataBinder.Eval (Object, String): dùng để đánh giá (evalutate) lại biểu thức databinding với một đối tượng (Object) tại thời điểm runtime
- Container.DataItem: là định danh tại thời điểm runtime cho DataItem.
DSBaiHat.aspx.cs using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Data;
public partial class DSBaiHat : System.Web.UI.Page
{
public DataSet LayDanhSachBaiHat() {
DataSet ds;
ds = new DataSet();
string sConnectString;
string sSql;
sConnectString = "Provider=Microsoft.Jet.OleDB.4.0;Data Source=" + Server.MapPath("DB/MusicDB.mdb");
OleDbConnection myConn = new OleDbConnection(sConnectString);
sSql = "SELECT
MaBaiHat,TenBaiHat,NoiDung,TenNhacSi,BaiHat.MaNhacSi as MaNS FROM BaiHat,NhacSi WHERE BaiHat.MaNhacSi=NhacSi.MaNhacSi";
try {
myConn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sSql, myConn);
da.Fill(ds);
myConn.Close();
}
catch (Exception ex) {
Response.Write(ex.Message);
}
return ds;
}
public void HienThiDanhSachBaiHat() {
try {
DataSet ds;
ds = new DataSet();
ds = LayDanhSachBaiHat();
dlBaiHat.DataSource = ds.Tables[0];
dlBaiHat.DataBind();
}
catch (Exception ex) {
Response.Write(ex.Message);
} }
protected void Page_Load(object sender, EventArgs e) {
HienThiDanhSachBaiHat();
} }
b) Hiển thị chi tiết thông tin bài hát ( CTBaiHat.aspx)
56
Mã nguồn minh hoạ:
CTBaiHat.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CTBaiHat.aspx.cs"
Inherits="CTBaiHat" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="dlBaiHat" runat="server" GridLines="Both">
<HeaderTemplate>
<td>
<B>Thông tin bài hát</B>
</td>
</HeaderTemplate>
<ItemTemplate>
<td>
<B>Mã bài hát:</B>
<%#DataBinder.Eval(Container.DataItem,"MaBaiHat") %>
</br><B>Tên bài hát:</B>
<%#DataBinder.Eval(Container.DataItem,"TenBaiHat") %>
</br><B>Nội dung bài hát:</br></B>
<%#DataBinder.Eval(Container.DataItem,"NoiDung") %>
</br><B>Nhạc sĩ sáng tác:</B>
<a href='<%#"CTNhacSi.aspx?MaNhacSi="+
DataBinder.Eval(Container.DataItem,"MaNS") %>'>
<%#DataBinder.Eval(Container.DataItem,"TenNhacSi") %></a>
</td>
</ItemTemplate>
</asp:DataList><br />
</div>
</form>
</body>
</html>
CTBaiHat.aspx.cs using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data;
using System.Data.OleDb;
public partial class CTBaiHat : System.Web.UI.Page {
public DataSet LayThongTinBaiHat(string sMaBaiHat) {
DataSet ds;
ds = new DataSet();
string sConnectString;
string sSql;
sConnectString = "Provider=Microsoft.Jet.OleDB.4.0;Data Source=" + Server.MapPath("DB/MusicDB.mdb");
OleDbConnection myConn = new OleDbConnection(sConnectString);
sSql = "SELECT
MaBaiHat,TenBaiHat,NoiDung,TenNhacSi,BaiHat.MaNhacSi as MaNS FROM BaiHat,NhacSi WHERE BaiHat.MaNhacSi=NhacSi.MaNhacSi ";
sSql += "AND MaBaiHat='" + sMaBaiHat + "'";
try {
myConn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sSql, myConn);
da.Fill(ds);
myConn.Close();
}
catch (Exception ex) {
Response.Write(ex.Message);
}
58 return ds;
}
public void HienThiChiTietBaiHat(string sMaBaiHat) {
try {
DataSet ds;
ds = new DataSet();
ds = LayThongTinBaiHat(sMaBaiHat);
dlBaiHat.DataSource = ds.Tables[0];
dlBaiHat.DataBind();
}
catch (Exception ex) {
Response.Write(ex.Message);
}
}
protected void Page_Load(object sender, EventArgs e) {
string sMaBaiHat;
if (Request.QueryString["MaBaiHat"] != null) {
sMaBaiHat = Request.QueryString["MaBaiHat"];
HienThiChiTietBaiHat(sMaBaiHat);
} } }