Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Công nghệ .NET.NET Technology
Lương Tr ần Hy Hi ếnBộ môn Hệ thống Thông tinKhoa Công Nghệ Thông Tin
Trường ĐHSP TP. Hồ Chí Minh
Chương 4: Gắn kết dữ liệu
Data Binding
Công nghệ NET 3 HIENLTH
Nội dung chính
� ADO.NET� DataBinding� DataBound Control
Công nghệ NET 4 HIENLTH
Ôn tập ADO.NET
Công nghệ NET 5 HIENLTH
CẤU TRÚC CỦA ADO.NET
� NET Data Provider - một tập hợp các thành phần bao gồm các đối tượng:o Connection: cung cấp việc kết nối đến CSDL o Command : Thi hành các câu lệnh SQL, cập nhật dữ liệu
thông qua đối tượng Adaptero DataReader cung cấp một luồng truy xuất DL o DataAdapter cung cấp cầu nối giữa đối tượng Dataset và
CSDL. DataAdapter sử dụng đối tượng Command để thực thi các câu lệnh SQL
Công nghệ NET 6 HIENLTH
Đối tượng DataSet
� DataSet bao gồm tập các đối tượng DataTable,mỗi DataTable điển hình tương đương với một table hoặc là một view mà ta có thể thiết lập mối quan hệ giữa chúng thông qua đối tượng DataRelation.
� Dữ liệu trong DataSet có thể nhất quán bằng cách sử dụng đối tượng UniqueConstraint và ForeignKeyConstraint
Công nghệ NET 7 HIENLTH
Mô hình đối tượng DataSet
Công nghệ NET 8 HIENLTH
Đối tượng DataSet
� Tạo Dataset:DataSet ds = new DataSet();
� Thuộc tínho Tables: trả về danh sách các bảng trong DataSeto Count: Trả về số DataTable trong DataSet
� Ví dụ:DataSet ds = new DataSet();
ObjDataTable = ds.Tables;
foreach(DataTable obj in ds.Tables)
{
//xử lý datatable obj;
}
Công nghệ NET 9 HIENLTH
Đối tượng DataTable
� DataTable được dùng để trình bày các bảng trong DataSet.
� Lớp DataTable được định nghĩa trong namespace System.Data
� DataTable gồmoDataColumnCollectionoDataRowCollection
Công nghệ NET 10 HIENLTH
Đối tượng DataTable
� Khởi tạo:
DataTable dt = new DataTable();
hay:DataTable dt = new DataTable(“Tên_DataTable”);
Công nghệ NET 11 HIENLTH
Đối tượng DataTable
� DataColumn: Trình bày lược đồ của một cột trong một DataTable. Mỗi DataColumn có một thuộc tính DataType để xác định kiểu dữ liệu được lưu trữ trong DataColumn
� Khởi tạo DataCoumn dc = new DataColumn();
� DataRow: trình bày một dòng dữ liệu trong DataTable
� Khởi tạo:DataRow r = new DataRow();
Công nghệ NET 12 HIENLTH
Đối tượng DataTable
� Các thuộc tính - phương thức của DataTableo Columns: trả về các cột trong Datatableo Columns.Count: trả về số cột trong bảngo Columns.Add(DataColumn): Thêm cột vào bảngo Rows: trả về các dòng, mỗi dòng là một đối tượng
datarowo Rows.Count: trả về số dòng trong bảngo Rows.Add(DataRow): thêm một dòng vào bảng
Công nghệ NET 13 HIENLTH
Đối tượng DataTable
� Ví dụ:DataTable dt= new DataTable(“Table”);
DataColumn c1= new DataColumn(“F1”);
DataColumn c2= new DataColumn(“F2”);
dt.Columns.Add(“c1”);
dt.Columns.Add(“c2”);
DataRow dr;
for(i=1; i<=n; i++)
{
dr=new DataRow();
dr[0]=i; dr[1]=i; dt.Rows.Add(dr);
}
Công nghệ NET 14 HIENLTH
DataView-DataRowView
� DataRowView: là một dòng dữ liệu trong dataView
� DataView: là đối tượng dùng để lưu trữ dữ liệu, có cấu trúc dạng bảng, cho phép sắp xếp, tìm kiếm dữ liệu.
� Dataview được tạo từ một hoặc nhiều dataRowView
Công nghệ NET 15 HIENLTH
DataView-DataRowView
� Khai báo:DataView dv = new DataView();
� Thuộc tính:o Sort: Sắp xếp dữ liệu
� Ví dụ: dv.Sort =“F1 F5 desc, F2 asc”;
Công nghệ NET 16 HIENLTH
DataView-DataRowView
� FilterRow: lọc dữ liệu theo một điều kiện cho trước
dv.FilterRow = “Expression”
� Ví dụ:dv.FilterRow =“F1>10”;
Công nghệ NET 17 HIENLTH
DataView-DataRowView
� FindRow(Value): trả về một mảng DataRowView thỏa điều kiện thiết lập trong thuộc tính sort
� Ví dụ: Lọc ra các dòng thỏa điều kiện F2=”A” trong bảng dưới đây:
DataView dv = new DataView();
dv.Sort= “F2”;
DataRowView[] drv;
drv=dv.FindRow(“A”);
F1 F2 F3
12 A B
5 C E
8 D F
Công nghệ NET 18 HIENLTH
Các bước kết nối CSDL
� Bước 1: Tạo kết nối� Bước 2: Tạo điều khiển truy vấn SQL� Bước 3: Mở kết nối dữ liệu� Bước 4: Thực thi truy vấn SQL� Bước 5: Đóng kết nối� Bước 6: In kết quả
Công nghệ NET 19 HIENLTH
Lưu ý:
� Hoặc tạo chuỗi kết nối duy nh ất lưu trong Web.configo Bổ sung vào tag <configuration> một tag
<connectionStrings> như sau:<connectionStrings>
<name="eStore " connectionString="Server=.; Database=eStore20; Integrated Security=True;“ /></connectionStrings>
� Lấy chuỗi kết nối này:o string connectionString =
WebConfigurationManager.ConnectionStrings["eStore "].ConnectionString;
Công nghệ NET 20 HIENLTH
Trình bày d ữ liệuTrình bày dữ liệu dạng lưới, có phân trang
Trình bày dữ liệu dạng bảng, có phân trang
Trình bày dữ liệu dạng Chương, mục
Phần tiếp theo sẽ làm rõ
Công nghệ NET 21 HIENLTH
Công nghệ NET 22 HIENLTH
Công nghệ NET 23 HIENLTH
Công nghệ NET 24 HIENLTH
Đối tượng Parameters
� Chức năng :Truyền tham số cho câu lệnh Sql khi sử dụng đối tượng command để thao tác dữliệu.
� Khai báo đối tượng Parameters:o Sử dụng cơ sở dữ liệu Sql
SqlParameter sqlPar;sqlPar =new SqlParameter("@parVar", SqlDbType);
Công nghệ NET 25 HIENLTH
Đối tượng Parameters
� Ví dụ:string sql1 = “INSERT INTO SinhVien(MaSV,
HoTen,DTB) VALUES (@x,@y,@z)";
SqlParameter px, py, pz;
px = new
SqlParameter("@x",SqlDbType.VarChar);
py = new
SqlParameter("@y",SqlDbType.NVarChar);
pz = new SqlParameter("@z", SqlDbType.float);
Công nghệ NET 26 HIENLTH
Đối tượng Parameters
� Add tham số vào đối tượng command:o Thứ tự add tham số vào đối tượng command phải đúng
với thứ tự các tham số trong câu lệnh sql.o Cú pháp:
CmdObject.Parameters.Add(parVar);
� Ví dụ:px.Value = txtMa.Text;
cmd.Parameters.Add(px);
py.Value = txtHoTen.Text;
cmd.Parameters.Add(py);
pz.Value = txtDTB.Text;
cmd.Parameters.Add(pz);
Công nghệ NET 27 HIENLTH
Đối tượng Parameters
� Thuộc tính của Parametero ParameterName: tên tham sốo SqlDbType: kiểu dữ liệu của tham sốo Size: kích thước của giá trị tham sốoDirection: Input, output or Botho SourceColumn: ánh xạ một cột từ DataTabe
vào Parametero Value: gán giá trị cho tham số, giá trị này
chuyển cho tham số trong khi thực thi lệnh
Công nghệ NET 28 HIENLTH
DataBindingGắn kết dữ liệu
Công nghệ NET 29 HIENLTH
GIỚI THIỆU
� Kết gán dữ liệu (Data Binding) cho phép tạora mối liên hệ giữa một control (ví dụ một listboxhoặc một GridView) với dữ liệu nguồn
� Có 2 trường hợp kết gán:o Dùng DataSource Control (DataSourceID )o Viết code lấy DataSource (DataSource )
� Cần có sự tham gia của 2 thành phần:o Nguồn dữ liệuo Control thể hiện dữ liệu
Công nghệ NET 30 HIENLTH
DataBinding
� Các đối tượng cung cấp dữ liệu để hiển thị:o Biến đơn (int, string, HocSinh,....)o Hàm/Propertyo Biến dãy (Array, List, Hashtable, DataTable, ..)o Dùng List Control o Dùng Data source control được sử dụng:
• SqlDataSource• AccessDataSource • XmlDataSource• ObjectDataSource• SiteMapDataSource• ....
Công nghệ NET 31 HIENLTH
DataBinding
� Dùng phương thức DataBind() để gắn kết dữ liệuo Có thể gọi Page.DataBind() để yêu cầu tất cả
các control trên trang thực hiện gắn kết dữ liệu.
Công nghệ NET 32 HIENLTH
Cú pháp
� Thuộc tính = “<%# nguồn-dữ-liệu%>”
Công nghệ NET 33 HIENLTH
DataBinding
� Có thể bind một expression vào control
� Bind dữ liệu dạng dãy vào control thể hiện dãy
Công nghệ NET 34 HIENLTH
DataBound ControlCác đối tượng gắn kết dữ liệu
Công nghệ NET 35 HIENLTH
List-Bound control
� Kết nối đến nguồn dữ liệu và hiển thị dữ liệu
� Các List – bound control gồm:
� DropDownList
� ListBox
� CheckBoxList
� RadioButtonList
� GridView
� DataList
� Repeater
Công nghệ NET 36 HIENLTH
� Thiết lập các thuộc tính
Thuộc tính Mô tả
DataSource � DataSet chứa dữ liệu
DataMember � Bảng dữ liệu trong DataSet
DataTextField � Field trong DataTable được hiển thị
DataValueField � Field trong DataTable trở thành giá trị của item
Gán dữ liệu từ Dataset
Công nghệ NET 37 HIENLTH
Gán dữ liệu từ Dataset
� Điền dữ liệu vào DataSet, gọi phương thức DataBind()
= ds.Tables[0]; adap.Fill(ds);listBound.DataSource = ds.Tables[0]; listBound.DataBind();
Công nghệ NET 38 HIENLTH
Gán dữ liệu từ DataReader
� Thiết lập thuộc tính
Thuộc tính Mô tả
DataSource � Nguồn dữ liệu
DataTextField � Field trong DataTable được hiển thị
DataValueField � Field trong DataTable trở thành giá trị của item
Công nghệ NET 39 HIENLTH
Gán dữ liệu từ DataReader
� Gọi phương thức DataBind
listbound.DataSource = dr;listbound.DataBind();
Công nghệ NET 40 HIENLTH
Gán dữ liệu từ DataReader
� Đọc từng record
while (dr.Read())
{
string value = dr[Index]ToString();hoặc string value = dr["FieldName"].ToString();
listBound.Items.Add(new ListItem(value));
}
Công nghệ NET 41 HIENLTH
DropDownList
� Cú pháp:
� Các thu ộc tính:o Id.Item.Count: số phần tử trong danh sácho AutoPostBack =true : phần tử được chọn sẽ postback về
servero SeletedItem: trả về phần tử được chọno SeletedText: trả về nội dung phần tử được chọno SeletedValue: trả về giá trị (key) phần tử được chọn
<asp : DropDownList ID ="Drp" runat ="server“></ asp : DropDownList >
Công nghệ NET 42 HIENLTH
DropDownList
� Sự kiện:
oOnSelectedIndexChangeoTextChange
Công nghệ NET 43 HIENLTH
Ví dụprotected void Page_Load(object sender, EventArgs e)
{
string strcn = "server=.; database=SongAlbum; uid=sa; pwd=";
SqlConnection con = new SqlConnection(strcn);
con.Open();
string sql = "select * from Artist";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
string text = dr[0].ToString();
string value = dr[1].ToString();
ddlDSCaSy.Items.Add(new ListItem(text,value));
}
}
Công nghệ NET 44 HIENLTH
ListBox
� Cú pháp:
� Các thu ộc tính:o Rows: trả về số dòng hiển thị trong
listbox o SelectedIndex: chỉ số index của
phần tử được chọn trong listbox
<asp : ListBox ID ="ListBox1" runat ="server"></ asp : ListBox ></ div >
Công nghệ NET 45 HIENLTH
ListBox
o SelectedItem: phần tử được chọno SelectionMode: chế độ cho phép chọn nhiều phần tử cùng
một lúco Items: tập các phần tử trong listbox
� Sự kiện:o SelectedIndexChanged : sự kiện xãy ra khi thuộc tính
SelectedIndex được thay đổi
Công nghệ NET 46 HIENLTH
CheckBoxList
� Cú pháp:
� Thuộc tính:o AutoPostBack: nếu có giá trị true
thì phần tử được chọn sẽ postbackvề server
o Items : tập các phần tử trong checkboxlist
<asp:CheckBoxList ID="CkBLst" runat="server">
</asp:CheckBoxList>
Công nghệ NET 47 HIENLTH
CheckBoxList
� Items.Count: số phần tử trong checkboxlist� RepeatColumns: số cột lặp� RepeatDirection="Horizontal/Vertical”� RepeatLayout="Table/Flow”
Công nghệ NET 48 HIENLTH
RadioButtonList
� Cú pháp:
� Các thuộc tính:o AutoPostBacko SelectedIndexo SelectedItemo RepeatLayouto RepeatDirection
<asp:RadioButtonList ID="RadioButtonList1" runat="server">
</asp:RadioButtonList>
Công nghệ NET 49 HIENLTH
Ví dụ:
<asp:RadioButtonList id="RdLst“ RepeatColumns="2"
RepeatDirection="Vertical“ runat="server">
</asp:RadioButtonList>protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ArrayList arrlst = new ArrayList();
arrlst.Add("Item1"); arrlst.Add("Item2"); arrlst.Add("Item3"); arrlst.Add("Item4");
rdlst.DataSource = arrlst;
DataBind();
}}
Công nghệ NET 50 HIENLTH
DataList
� Sử dụng DataList hiển thị dữ liệu từ data sourceo Sử dụng khi hiển thị dữ liệu dạng danh sách (tương
tự dạng Table)o Đơn giản hơn GridViewo Ít nhất có ItemTemplateo Mỗi template có kiểu dáng riêng (HeaderStyle và
ItemStyle)
Công nghệ NET 51 HIENLTH
DataList
� Sử dụng tùy chỉnh EditTemplate
Công nghệ NET 52 HIENLTH
DataList
� Các bước sử dụng DataList:o Chuẩn bị nguồn dữ liệuo Gán DataSource cho DataListo Cấu hình ItemTemplate
Công nghệ NET 53 HIENLTH
Cấu hình ItemTemplate
� Tuân thủ cú pháp dataBinding:Thuộc tính = ‘<%# Eval(“field/property”)%>’
� Có thể thực hiện bằng phương pháp Design
Công nghệ NET 54 HIENLTH
GridView
� Hiển thị danh sách dạng table� Cho phép phân trang� Thực hiện các chức năng Insert, Update và
Delete dữ liệu trực tiếp.� Chỉ hiển thị những cột cần hiển thị:
o AutoGenerateCoumns = falseo Add các cột vào Bound Field vào GridView
o PageSize : số record trên mỗi trango Xác định cột dữ liệu cần bind: DataFieldo Xác định kiểu dữ liệu phức tạp: TemplateField
Công nghệ NET 55 HIENLTH
GridView
� Gán dữ liệu dùng Evalo Cú pháp:
<%#Eval("FieldName") %>
Công nghệ NET 56 HIENLTH
GridView
� Sự kiện:
<asp:GridView ID = "gd1" runat="server" AllowPaging="True"
OnPageIndexChanged="Sangtrang"
PageSize="3"
OnCancelCommand="CancelRecord"
OnDeleteCommand="DeleteRecord"
OnEditCommand="EditRecord"
OnItemCommand="Chon"
OnUpdateCommand="UpdateRecord”
</asp:GridView>
Công nghệ NET 57 HIENLTH
GridView
� Tùy chỉnh giao diện (style)o AlternatingItemStyleo FooterStyle/HeaderStyle
o…
Công nghệ NET 58 HIENLTH
GridView
�<asp:BoundField />�<asp:CheckBoxField />�<asp:HyperLinkField />�<asp:ImageField />�<asp:CommandField />�<asp:TemplateField>�<asp:DynamicField />
Công nghệ NET 59 HIENLTH
GridView
� TemplateField : Cho phép xuất dữ liệu theo ý muốn, không phải theo dạng bảng.o Cú pháp :
<Columns >
<asp:TemplateField >
</asp:TemplateField >
</Columns >
Công nghệ NET 60 HIENLTH
GridView
<asp:GridView ID = "gd2" runat = "server"><Columns>
<asp:TemplateField><HeaderTemplate>
//đặt phần dữ liệu là tiêu đề không lặp</HeaderTemplate><ItemTemplate>
// đặt phần dữ liệu hiển thị lặp đi lặp lại //(các record)
</ItemTemplate></asp: TemplateField>
</Columns></asp:GridView>
Công nghệ NET 61 HIENLTH
Ví dụ
Hiển thị dữ liệu có dạng như hình ta sử dụng <asp:TemplateField>
Công nghệ NET 62 HIENLTH
GridView
� Edit dữ liệu trên lưới (không khóa ngoại)o Update/Edit
� Sử dụng Edit/Delete Command Fieldo Update: RowEditing, RowCancellingEdit,
RowUpdatingo Delete: RowDeleting
Công nghệ NET 63 HIENLTH
GridView
� Edit dữ liệu trên lưới (có khóa ngoại)o Sử dụng TemplateFieldo Sử dụng EditItemTemplateo Sử dụng RowDataBoundo Kết hợp FindControl
Công nghệ NET 64 HIENLTH
GridView
� Xóa 1 lúc nhiều dòng trên lướio Thêm 1 cột CheckBox vào lướio Xóa các dòng đang được check
Công nghệ NET 65 HIENLTH
Repeater
� Ý ngh ĩa: o Định dạng dữ liệu từ data source, phân trang
� Các thành ph ần của repeater:o AlternatingItemTemplateo FooterTemplateo HeaderTemplateo ItemTemplateo SeparatorTemplate
Công nghệ NET 66 HIENLTH
Repeater
Template Mô tả
<HeaderTemplate> Chứa tiêuđề, chỉ xuất hiện một lần
<ItemTemplate> Phần chứa dữ liệu trong danh sách
<AlternatingItemTemplate> Template này chỉ áp dụng cho những dòng có thứ tự lẻ
<Separator Template> Xácđịnh nội dung HTML giữa các dòng
<FooterTemplate> Chỉ xuất hiện một lần cuối danh sách
Cấu trúc của Repeater
Công nghệ NET 67 HIENLTH
Repeater
� Lưu ý :
o<ItemTemplate> bắt buộc phải cóo<ItemTemplate>và
<AlternatingItemTemplate> dùng để chứa những dữ liệu, hay định dạng ngược chiều và xen kẽ nhau
ophần dữ liệu đặt trong các thẻ con có thể viết bằng codeInline
Công nghệ NET 68 HIENLTH
Ví dụ
� Xuất dữ liệu dùng repeater có dạng:
Công nghệ NET 69 HIENLTH
THE END