ung dung web chuong 7

Tags:

Post on 01-Nov-2014

528 Views

Category:

Education

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Chương 7

ADO.NET - II

Mục tiêu Hiểu kết buộc dữ liệu Repeater control DataList control Cập nhật dữ liệu qua form Làm việc với dữ liệu XML

Data Binding (kết buộc dữ liệu) Kết buộc dữ liệu là tiến trình liên kết dữ liệu lấy

được vào điều khiển để hiển thị Dữ liệu có thể kết buộc đến tất cả các điều khiển

dùng biểu thức kết buộc dữ liệu được đặt giữa thể <%#......%>

Dữ liệu được kết buộc đến điều khiển bất cứ lúc nào phương thức DataBind() được gọi

Kết buộc dữ liệu có thể thực hiện trên các kiểu dữ liệu khác nhau như:

Các thuộc tính Collections Biểu thức Kết quả của lời gọi hàm

Thuộc tínhASP.NET cho phép các nhà phát triển kết buộc dữ liệu đến các biến public, thuộc tính của trang hay thậm chí thuộc tính của các điều khiển khác<html><title>DataBinding </title>

<script language="C#" runat="server">void Page_Load(Object sender, EventArgs e) {

Page.DataBind();}</script><form runat=server> <center><b><u> DataBinding</center></b></u><br> Enter a string and press tab <br><br>

Thuộc tính<asp:textbox id = "txtControl" AutoPostback="true" runat= "server" /><br> <br>

<asp:label id = "lblControl" text = <%#txtControl.Text%> runat = "server" /><br><br>

</form>

</html>

Biểu thức và phương thức<%@ Import Namespace="System.Data" %>

<html><title>DataBinding Expressions</title>

<script language="C#" runat="server">void Page_Load(Object Sender, EventArgs E) { Response.Write("<center><b><u>DataBinding

Expressions</center></b></u><br>"); if(!IsPostBack) {

DataTable mydt = new DataTable();DataRow mydr; mydt.Columns.Add(new DataColumn ("Numbers",

typeof(Int32)));

Biểu thức và phương thứcfor (int i=0;i<=5;i++){

mydr = mydt.NewRow();mydr[0] = i;mydt.Rows.Add(mydr);

} dlMyList.DataSource = mydt; dlMyList.DataBind(); } } int Square(int num) {

int ans = num* num;return ans;

}

Biểu thức và phương thức int Cube(int num) {

int ans = num*num*num;return ans;

} </script> <form runat=server> <asp:DataList id = "dlMyList" runat = "server"> <ItemTemplate>

Number : <%# ((DataRowView)Container.DataItem)["Numbers"] %>

Square : <%# Square ((int) ((DataRowView) Container.DataItem) ["Numbers"]) %>

Cube : <%# Cube ((int) ((DataRowView) Container.DataItem) ["Numbers"]) %>

Biểu thức và phương thức

</ItemTemplate></asp:DataList></form>

</html>

Phương thức DataBinder.Eval()

<%# DataBinder.Eval(Container.DataItem,"max_lvl","{0:c}") %>

Tên chứa mục dữ liệu

Tên trường

Định dạng chuỗi

Arguments

Phương thức này dùng để đánh giá biểu thức kết buộc dữ liệu ở thời gian thực thi và định dạng kết xuất được hiển thị trên trình duyệt.

Example:

Repeater

Templates

ItemTemplate

AlternatingItemTemplate

HeaderTemplate

FooterTemplate

SeparatorTemplate

Là một container control, dùng để hiển thị danh sách các dữ liệu theo một mẫu định dạng nào đó cho từng mục dữ liệu.

Mẫu định dạng (template) là một tập các phần tử HTML hay các điều khiển dùng để định dạng hiển thị của điều khiển

Repeater Ví dụ<%@ Import Namespace="System.Data" %><html> <title>Repeater Control</title> <head>

<script language="C#" runat="server">void Page_Load(Object Sender, EventArgs e) {

Response.Write("<center><b><u>Repeater</center> </b></u><br>");

if (!IsPostBack) {

DataTable mydt = new DataTable();DataRow mydr; mydt.Columns.Add(new DataColumn ("Numbers",

typeof(Int32)));

Repeater Ví dụmydt.Columns.Add(new DataColumn ("Squares",

typeof(Int32)));mydt.Columns.Add(new DataColumn ("Cubes",

typeof(Int32)));for (int i=0;i<=2;i++){ mydr = mydt.NewRow();

mydr[0] = i;mydr[1] = i*i;mydr[2] = i*i*i;mydt.Rows.Add(mydr);

} Repeater1.DataSource = mydt; Repeater1.DataBind();

Repeater2.DataSource = mydt;Repeater2.DataBind();

Repeater Ví dụ}

} </script> </head> <body> <form runat=server> <b>Repeater1:</b> <p> <asp:Repeater id=Repeater1 runat="server"> <HeaderTemplate> <table border=1> <tr> <td><b>Number</b></td>

<td><b>Square</b></td> <td><b>Cube</b></td>

</tr>

Repeater Ví dụ </HeaderTemplate> <ItemTemplate> <tr>

<td> <%# DataBinder.Eval (Container.DataItem, "Numbers") %> </td>

<td> <%# DataBinder.Eval (Container.DataItem, "Squares") %> </td>

<td> <%# DataBinder.Eval(Container.DataItem, "Cubes") %> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> <p>

Repeater Ví dụ<b>Repeater2:</b><p><asp:Repeater id=Repeater2 runat="server"><HeaderTemplate> Number (Square) [Cube] :</HeaderTemplate><ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "Numbers")

%> (<%# DataBinder.Eval(Container.DataItem,

"Squares") %>) [<%# DataBinder.Eval(Container.DataItem, "Cubes")

%>]</ItemTemplate><SeparatorTemplate>, </SeparatorTemplate></asp:Repeater>

Repeater Output

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

DataList

Templates

ItemTemplate

AlternatingItemTemplate

SelectedItemTemplate

EditItemTemplate

HeaderTemplate

FooterTemplate

SeparatorTemplate

Cho phép người dùng chỉ ra luồng dữ liệu

DataList – Ví dụ<%@ Import Namespace="System.Data" %><html> <title>DataList Control</title> <head> <script language="C#" runat="server">

void Page_Load(Object Sender, EventArgs e) { Response.Write("<center><b><u>Data List with

Alternating Columns</center></b></u><br>"); if (!IsPostBack)

{DataTable mydt = new DataTable();DataRow mydr; mydt.Columns.Add(new DataColumn ("Numbers",

typeof(Int32)));

DataList Ví dụ mydt.Columns.Add(new DataColumn("Squares", typeof(Int32))); mydt.Columns.Add(new DataColumn("Cubes",typeof(Int32))); for (int i=0;i<30;i++) { mydr = mydt.NewRow();

mydr[0] = i;mydr[1] = i*i;mydr[2] = i*i*i;mydt.Rows.Add(mydr);

} dlMyList.DataSource = mydt; dlMyList.DataBind(); } } </script>

DataList Ví dụ </head> <body> <form runat=server> <asp:DataList id="dlMyList" RepeatDirection="Horizontal" RepeatColumns="10" runat="server"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "Numbers") %><br> <%# DataBinder.Eval(Container.DataItem, "Squares") %><br> <%# DataBinder.Eval(Container.DataItem, "Cubes") %><br> </ItemTemplate> <AlternatingItemTemplate> <i><b><%# DataBinder.Eval(Container.DataItem, "Numbers") %></b> <i><br> <i><b><%# DataBinder.Eval(Container.DataItem, "Squares") %><b><i><br><i><b><%# DataBinder.Eval(Container.DataItem, "Cubes") %><b><i><br>

DataList Kết xuất

</AlternatingItemTemplate> </asp:DataList> </form> </body></html>

Quản lý dữ liệu trong ASP.NET

DATADATA

InsertInsert

SelectSelectDeleteDelete

UpdateUpdate

Chèn dữ liệuĐể chèn dữ liệu :

SqlCom.Parameters.Add(new SqlParameter("@pubid", SqlDbType.SmallInt, 2));

1. Nối kết CSDL

2. Tạo lệnh chèn trong CSDL

Tạo một tham số

Thiết lập nối kết CSDL

Chèn dữ liệu qua đối tượng command

mySqlCon = new SqlConnection ("server=SQLDB; uid= sa; pwd =password; database=pubs");

string myinsertCmd = "insert into publishers ( pub_id, pub_name, city, state, country ) values (@pubid, @pubname, @city, @state, @country)";SqlCommand mySqlCom = new SqlCommand(myinsertCmd, mySqlCon);

Chèn dữ liệu

<%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SqlClient" %><html> <title>Inserting Data in a Database</title>

<script language="C#" runat="server" Debug="true"> SqlConnection mySqlCon; protected void Page_Load(Object Src, EventArgs e) { mySqlCon = new SqlConnection("server=SQLDB;uid

=sa;pwd=password; database=pubs"); if(!IsPostBack)

BindGrid(); }

Chèn dữ liệu public void AddPublisher(Object sender, EventArgs e) {

string strInsert = "insert into publishers ( pub_id, pub_name, city, state, country ) values (@pubid, @pubname, @city, @state, @country)"; SqlCommand mySqlCom = new SqlCommand(strInsert, mySqlCon); mySqlCom.Parameters.Add(new SqlParameter ("@pubid", SqlDbType.Char, 4)); mySqlCom.Parameters ["@pubid"]. Value = txtPub_Id.Text; mySqlCom.Parameters.Add(new SqlParameter ("@pubname", SqlDbType.VarChar, 40)); mySqlCom.Parameters ["@pubname"]. Value = txtPub_Name. Text; mySqlCom.Parameters.Add(new SqlParameter ("@city", SqlDbType.VarChar, 20)); mySqlCom.Parameters["@city"].Value = txtCity.Text;

Chèn dữ liệu

mySqlCom.Parameters.Add(new SqlParameter("@state", SqlDbType.Char, 2)); mySqlCom.Parameters ["@state"]. Value = txtState.Text; mySqlCom.Parameters.Add(new SqlParameter ("@country", SqlDbType.VarChar, 30)); mySqlCom.Parameters ["@country"].Value = txtCountry.Text; mySqlCom.Connection.Open(); mySqlCom.ExecuteNonQuery(); Message.InnerHtml = "<b>Record Added</b><br>"; mySqlCom.Connection.Close(); txtPub_Id.Text = ""; txtPub_Name.Text = ""; txtCity.Text = ""; txtState.Text = ""; txtCountry.Text = "";

Chèn dữ liệuBindGrid();

} public void BindGrid() { SqlDataAdapter mySqlda = new SqlDataAdapter ("select * from publishers where pub_id like '99%'", mySqlCon); DataSet myds = new DataSet(); mySqlda.Fill (myds, "publishers"); dbgMyGrid.DataSource = myds.Tables ["publishers"]. DefaultView; dbgMyGrid.DataBind(); } </script> <form runat="server">

<h2>Add a New Publisher:</h2><br>

Chèn dữ liệu Publisher Id should start with 99 and contain 4 digits<br><br> Pubisher ID: &nbsp&nbsp&nbsp&nbsp &nbsp&nbsp&nbsp <asp:textbox id="txtPub_Id" runat="server"/> Name: &nbsp&nbsp <asp:textbox id="txtPub_Name" runat="server"/> City: &nbsp <asp:textbox id="txtCity" runat="server"/> <br><br> State: &nbsp <asp:textbox id="txtState" runat="server"/> Country: &nbsp <asp:textbox id="txtCountry" runat="server"/> <br> <br> &nbsp &nbsp &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp <asp:button id="btnSubmit" Text="Submit" OnClick="AddPublisher" runat="server"/><br>

Chèn dữ liệu<span id="Message" MaintainState="false" style="font:

arial 11pt;" runat="server"/><br><asp:DataGrid id="dbgMyGrid" runat= "server"/>

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

Cập nhật dữ liệu Một cách để trình bày giao tiếp cho cập nhật dữ

liệu là cung cấp một tập dữ liệu đến người dùng và cho phép người dùng chọn hàng để cập nhật

DataGrid có thể được dùng để hiển thị tất cả dữ liệu cho người dùng, và người dùng chọn hàng để cập nhật

Người dùng có thể chọn hàng để cập nhật dùng EditCommandColumn trong DataGrid

EditCommandColumn cung cấp liên kết cho 3 sự kiện:

Edit Command Update Command Cancel Command

Cập nhật dữ liệu EditCommandColumn có thể thêm vào DataGrid như sau:

<asp:datagrid id="dbgMyGrid" runat="server" DataKeyField="pub_id" OnUpdateCommand="dbgMyGrid_Update" OnCancelCommand="dbgMyGrid_Cancel" OnEditCommand="dbgMyGrid_Edit"><Columns> <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" /></Columns></asp:datagrid>

Sự kiện có thể được thực hiện khi người dùng chọn lệnh trong EditCommandColumn

Cập nhật dữ liệu EditItemIndex dùng để xác định vị trí của

hàng được cập nh Sau khi giá trị hàng được gán cho EditItemIndex, hàng có thể được biên tập

Ví dụ

public void dbgMyGrid_Edit(Object sender, DataGridCommandEventArgs e){

dbgMyGrid.EditItemIndex = (int)e.Item.ItemIndex;}

Cập nhật dữ liệu

mySqlCmd.Parameters ["@pubid"].Value = dbgMyGrid.DataKeys[(int)e.Item.ItemIndex];

Lấy khóa chính của hàng được chọn cập nhật

mySqlCmd.Parameters ["@pubname"].Value = ((TextBox)e.Item.Cells[2].Controls[0]).Text;

Gán các giá trị thay đổi đến hàng qua các tham số

Cập nhật dữ liệu<%@ Import Namespace="System.Data.SqlClient" %><%@ Import Namespace="System.Data" %><HTML> <title>Updating Data in a Database</title> <script language="C#" runat="server"> SqlConnection mySqlCon; protected void Page_Load(Object Src, EventArgs e) {

Response.Write("<center><b><u>Updating Data</center></b></u><br>");

mySqlCon = new SqlConnection ("server=SQLDB; uid=sa; pwd=password;database=pubs"); if(!IsPostBack)

BindGrid(); }

Cập nhật dữ liệupublic void dbgMyGrid_Edit(Object sender, DataGridCommandEventArgs e) {

dbgMyGrid.Columns[0].HeaderText="Edit"; dbgMyGrid.EditItemIndex = (int)e.Item.ItemIndex;

BindGrid(); } public void dbgMyGrid_Cancel(Object sender, DataGridCommandEventArgs e) { dbgMyGrid.Columns[0].HeaderText="Cancel";

dbgMyGrid.EditItemIndex = -1;BindGrid();

} public void dbgMyGrid_Update(Object sender, DataGridCommandEventArgs e

Cập nhật dữ liệu{

dbgMyGrid.Columns[0].HeaderText="Update";string strUpdate = "UPDATE Publishers SET pub_id = @pubid,

pub_name = @pubname, city = @city, state = @state, country = @country WHERE pub_id = @pubid"; SqlCommand mySqlCmd = new SqlCommand(strUpdate, mySqlCon); mySqlCmd.Parameters.Add(new SqlParameter("@pubid", SqlDbType.Char, 4)); mySqlCmd.Parameters.Add(new SqlParameter ("@pubname",SqlDbType.VarChar, 40)); mySqlCmd.Parameters.Add(new SqlParameter ("@city",SqlDbType.VarChar, 20)); mySqlCmd.Parameters.Add(new SqlParameter("@state",SqlDbType.Char, 2)); mySqlCmd.Parameters.Add(new SqlParameter("@country",SqlDbType.VarChar, 30));

Cập nhật dữ liệu mySqlCmd.Parameters ["@pubid"]. Value = dbgMyGrid.DataKeys[(int)e.Item.ItemIndex]; mySqlCmd.Parameters ["@pubname"].Value=((TextBox)e.Item.Cells[2].Controls[0]).Text; mySqlCmd.Parameters ["@city"]. Value = ((TextBox)e.Item.Cells[3].Controls[0]).Text; mySqlCmd.Parameters ["@state"].Value = ((TextBox)e.Item.Cells[4].Controls[0]).Text; mySqlCmd.Parameters ["@country"].Value = ((TextBox)e.Item.Cells[5].Controls[0]).Text; mySqlCon.Open();

Cập nhật dữ liệu try { mySqlCmd.ExecuteNonQuery(); lblMessage.Text = "<b>Record Updated</b><br>" ; dbgMyGrid.EditItemIndex = -1; } catch(SqlException exc) {

if (exc.Number == 2627)lblMessage.Text = "ERROR: A record already

exists with the same primary key";else

lblMessage.Text = exc.ToString() + "ERROR: Could not update record, please ensure the fields are correctly filled out"; }

Cập nhật dữ liệu mySqlCon.Close(); BindGrid(); } public void BindGrid() { SqlDataAdapter mySqlda = new SqlDataAdapter ("select * from publishers", mySqlCon); DataSet myds = new DataSet(); mySqlda.Fill(myds, "publishers"); dbgMyGrid.DataSource = myds.Tables ["publishers"]. DefaultView; dbgMyGrid.DataBind(); } </script> <body> <form id="Form1" runat="server">

Cập nhật dữ liệu <h4><asp:label id="lblMessage" runat="server"> </asp:label> </h4><br> <ASP:Datagrid id="dbgMyGrid" runat="server" DataKeyField="pub_id" OnUpdateCommand="dbgMyGrid_Update" OnCancelCommand ="dbgMyGrid_Cancel" OnEditCommand= "dbgMyGrid_Edit"> <Columns> <asp:EditCommandColumn EditText="Edit" CancelText ="Cancel" UpdateText="Update" /> </Columns> </ASP:Datagrid></form> </body></HTML>

Cập nhật dữ liệu

Xóa dữ liệu OnDeleteCommand thực hiện nhiệm vụ xóa

hàng dữ liệu được chọn

<asp:DataGrid id="dbgMyGrid" runat="server" DataKeyField="pub_id" OnDeleteCommand=" dbgMyGrid_Delete">

<Columns><asp:ButtonColumn Text="Delete Publisher"

CommandName="Delete" />

</Columns></asp:DataGrid>

Xóa dự liệu

<%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SqlClient" %><html> <title>Deleting Data in a Database</title> <script language="C#" runat="server" Debug="true"> SqlConnection mySqlCon; protected void Page_Load(Object sender, EventArgs e) { Response.Write("<center><b><u>Deleting Data</center></b></u><br>");

mySqlCon = new SqlConnection ("server=SQLDB; uid =sa; pwd =password; database=pubs"); if (!IsPostBack)

BindGrid(); }

Deleting Data Example Contd… public void dbgMyGrid_Delete(Object sender,

DataGridCommandEventArgs e) { string strDelete = "DELETE from publishers where pub_id = @pubid"; SqlCommand mySqlCmd = new SqlCommand(strDelete, mySqlCon);

mySqlCmd.Parameters.Add(new SqlParameter ("@pubid", SqlDbType.Char, 4)); mySqlCmd.Parameters["@pubid"].Value = dbgMyGrid.DataKeys [(int)e.Item.ItemIndex]; mySqlCon.Open();

try { mySqlCmd.ExecuteNonQuery();

Message.InnerHtml = "<b>Record Deleted</b><br>"; }

Cập nhật dữ liệu catch (SqlException) { Message.InnerHtml = "ERROR: Could not delete record"; Message.Style ["color"] = "red"; } mySqlCon.Close(); BindGrid(); } public void BindGrid() { SqlDataAdapter mySqlda = new SqlDataAdapter("select * from publishers", mySqlCon); DataSet myds = new DataSet(); mySqlda.Fill(myds, "publishers"); dbgMyGrid.DataSource =myds.Tables ["publishers"]. DefaultView;

Cập nhật dữ liệu dbgMyGrid.DataBind(); } </script> <body> <form runat="server" ID="Form1"> <span id="Message" EnableViewState="false" runat="server" /><p> <asp:DataGrid id="dbgMyGrid" runat="server" DataKeyField="pub_id" OnDeleteCommand=" dbgMyGrid_Delete"> <Columns>

<asp:ButtonColumn Text="Delete Publisher" CommandName="Delete" /> </Columns> </asp:DataGrid> </form>

Cập nhật dữ liệu </body></html>

Quản lý dữ liệu XML

<rootelement xmlns = "x-schema:scheduledSchema.xsl">FileStream myfs = new FileStream (Server.MapPath ("xmldatagrid.xml") ,FileMode.Open,FileAccess.Read);

StreamReader myreader = new StreamReader(myfs);

DataSet myds = new DataSet();myds.ReadXml(myreader);

<rootelement xmlns=” x-schema:scheduledSchema.xsl”>

Schema

1

2

3

Mở tập tin

Gán streamreader

Đọc dữ liệu từ một streamreader

Quản lý dữ liệu XML

DataView mySource = new DataView(myds.Tables[0]);DataGrid1.DataSource = mySource;DataGrid1.DataBind();

4 Kết buộc dự liệu

Ví dụ:

<%@ Import Namespace="System.IO" %><%@ Import Namespace="System.Data" %><html><title>XML Data</title>

<script language="C#" runat="server">void Page_Load(Object Src, EventArgs e) {

DataSet myds = new DataSet();

XML Data in a DataGrid FileStream myfs = new FileStream(Server.MapPath("xmldatagrid.xml"),FileMode.Open, FileAccess.Read); StreamReader myreader = new StreamReader(myfs); myds.ReadXml(myreader); myfs.Close(); DataView mySource = new DataView(myds.Tables[0]); lblTableName.Text = mySource.Table.TableName; dbgMyGrid.DataSource = mySource; dbgMyGrid.DataBind(); } </script> <body> <h3><font face="Arial">XML Data for Table: <asp:label id="lblTableName" runat= "server"/></font> </h3>

Hiển thị dữ liệu trong DataGrid </h3> <ASP:DataGrid id="dbgMyGrid" runat="server" /> </body></html>

top related