Updating các bản gh

Một phần của tài liệu Giáo trình Thiết kế web (Nghề: Quản trị mạng máy tính - Cao đẳng): Phần 2 - Trường CĐ nghề Kỹ thuật Công nghệ (Trang 58 - 66)

Trước khi đi vào các thao tác ghi dữ liệu ta xét thuộc tính DataKeyNames của điều khiển buộc dữ liệu liên quan đến các thao tác đó.

Thuộc tính DataKeyNames:

Tại cùng một thời điểm ta có thể có cùng một vài kiểu ghi dữ liệu cho một trường, do đó Visual Web Developer thêm thuộc tính DataKeyNames cho điều khiển buộc dữ liệu với mục đích giữ cả hai giá trị cũ và mới của một trường nào đó làm cho việc ghi dữ liệu được thực hiện một cách chính xác.

Để hiểu vai trị của thuộc tính DataKeyNames, ta hình dung trong hệ thống web site có một bảng ghi thơng tin các ý kiến phản hổi từ khách hàng gọi là Comments. Trong bảng ta có một trường đầu tiên là trường kiểu số CommentsID nhận giá trị duy nhất cho mỗi dòng. Khách hàng sẽ gửi các ý kiến kiến phản hồi của mình và được lưu trong bảng. Đến một lúc nào đó các thơng tin được sắp xếp lộn xộn và nhà quản trị phải thay đổi các ID cho các ý kiến đó, ví dụ từ 20 chuyển sang 19. Để làm điều này, người quản trị sẽ chọn bản ghi muốn thay đổi (chẳng hạn dùng điều khiển Grid view) và ASP.NET 2.0 sẽ lưu giá trị ID đó vào một tham số. Người quản trị sẽ gửi câu lệnh như sau đến database:

UPDATE Comments SET Comment =19 WHERE Comment =@CommentID Lưu ý là trong câu lệnh trên tên trường đã thay đổi (CommentsID) để câu lệnh nhận dạng bản ghi cần thay đổi giá trị. Đúng ra phải là WHERE CommentsID=@CommentsID nhưng sẽ bị xảy ra xung đột bởi vì @CommentsID nhận hai giá trị: Một giá trị cũ được lưu trên GridView (giá trị 20) và một giá trị mới do người quản trị nhập vào (19).

DataKeyNames giải quyết vấn đề này bằng cách tạo một từ điển giữ hai giá trị này cho các trường trong danh sách của chúng: Một giá trị cũ và một giá trị mới. Khi câu lệnh được gửi đến Database, ASP.NET sử dụng khả năng thơng minh của mình để cung cấp giá trị mới từ DataKeyNames cho mệnh đề SET của câu lệnh và sử dụng giá trị cũ từ DataKeyNames cho mệnh của câu lệnh.

Thật là lãng phí và chậm khi load up từ điển DataKeyNames với mọi trường, đặc biệt là bởi vì hầu hết các trường không gây ra sự xung đột như trên. Visual Web Developer tự động adds các trường mà cấu trúc của nó duy nhất trong database.

Ta sử dụng thuộc tính DataKeyNames để thiết lập một danh sách các trường (cách nhau bởi dấu phẩy) thể hiện khóa chính của data source. Khi thuộc tính

93

DataKeyNames được thiết lập thì các điều khiển buộc dữ liệu (DetailsView, FormView, GridView) tự động tạo đối tượng DataKey thể hiện trường hoặc các trường khóa của bản ghi hiện tại và lưu trữ trong thuộc tính DataKey của nó. Khi thuộc tính AutoGenerateColumns của các đối tượng buộc dữ liệu thiết lập là True thì các trường chỉ định trong DataKeyNames tự động thiết lập là Read Only.

Chú ý: Ta phải thiết lập cho thuộc tính DataKeyNames cho các thao tác tự động Update, Delete và Insert cho điều khiển DetailsView và FormView; Update và Delete cho điều khiển GridView.

Thực hiện Update dữ liệu:

Để thực hiện Update các bản ghi ta thực hiện thông qua hai bước cơ bản:

1. Khai báo thuộc tính UpdateCommand và thuộc tính UpdateCommandType của điều khiển DataSource được khai báo như sau:

o Trường hợp ta trực tiếp sử dụng câu lệnh SQL Update <asp:SqlDataSource ID="SqlDataSource1" runat="server"

...

UpdateCommand =”UPDATE [MyTable] SET [Field1] = @Field1,... [Field2] = @Field2 WHERE [Field1] = @Field1”>…

</asp:SqlDataSource>

o Hoặc sử dụng thủ tục StoredProcedure:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" … UpdateCommandType="StoredProcedure"

UpdateCommand="Update_storedProcedureName"> …

</asp:SqlDataSource>

Trong trường hợp này ta cần phải khai báo thuộc tính UpdateCommandType="StoredProcedure" mặc định thuộc tính này nhận giá trị UpdateCommandType="Text"

2. Khai báo các tham số <UpdateParameters> cho câu lệnh Update trên. Các điều khiển data source của ASP.NET chấp nhận các tham số vào (input parameters) để mà có thể chuyển các giá trị cho chúng tại thời điểm thực hiện. Ta sử dụng tham số parameters để cung cấp điều kiện tìm kiếm cho việc truy xuất dữ liệu, cung cấp giá trị cho các thao tác dữ liệu như inserted, updated, hoặc deleted trong kho lưu trữ dữ liệu; và để cung cấp các giá trị cho việc sorting, paging, và filtering.

Ta có thể sử dụng tham số để tùy chỉnh các giá trị gửi đến data source bởi các điều khiển buộc dữ liệu, chẳng hạn như GridView, DetailView, hoặc FormView, mà được supports tự động các thao tác update, insert, và delete.

Các giá trị Parameter có thể thu được từ nhiều nguồn khác nhau. Các đối tượng tham số cho phép ta có thể lấy các giá trị các thao tác dữ liệu từ các thuộc tính của các điều khiển Web server, cookies, session state, QueryString fields, user profile properties,.v.v…

Ta thực hiện khai báo như sau:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConn %>" SelectCommand="SELECT [ProductID],

[ProductType], [ProductName], [ProductDescription], [ProductSize], [ProductImageURL], [UnitPrice] FROM [Products]"

94 UpdateCommandType="StoredProcedure" UpdateCommandType="StoredProcedure" UpdateCommand="Update_Products">

<UpdateParameters>

<asp:Parameter Direction="ReturnValue" Name="RETURN_VALUE" Type="Int32" />

<asp:Parameter Name="ProductID" Type="Int32" /> <asp:Parameter Name="ProductType" Type="String" /> <asp:Parameter Name="ProductName" Type="String" /> <asp:Parameter Name="ProductDescription" Type="String" /> <asp:Parameter Name="ProductSize" Type="String" />

<asp:Parameter Name="ProductImageURL" Type="String" /> <asp:Parameter Name="UnitPrice" Type="Double" />

</UpdateParameters> </asp:SqlDataSource>

Ví dụ 3.9. Thực hiện thao tác cập nhật dữ liệu với các điều khiển sqlDataSource và GridView (trang vidu3_10.aspx).

<%@ Page Language="VB" %> <form id="form1" runat="server">

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConn %>" ProviderName="<%$

ConnectionStrings:MyConn.ProviderName %>" UpdateCommand="UPDATE Products SET ProductType = @ProductType, ProductName = @ProductName, ProductDescription =

@ProductDescription, ProductSize = @ProductSize, ProductImageURL = @ProductImageURL, UnitPrice = @UnitPrice WHERE (ProductID = @ProductID)" SelectCommand="SELECT * FROM [Products]"> </asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="ProductID">

<Columns>

<asp:CommandField ShowEditButton="true"

EditText="<IMG SRC='Images/icon_edit.gif' border=0/>" UpdateText="Update" CancelText="Cancel" />

</Columns> </asp:GridView> </form>

Ví dụ 3.10. Thực hiện thao tác cập nhật dữ liệu với các điều khiển sqlDataSource và GridView sử dụng storeprocedure (trang vidu3_11.aspx).

<%@ Page Language="VB" %> <form id="form1" runat="server">

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConn %>" SelectCommand="SELECT [ProductID], [ProductType],[ProductName],[ProductDescription], [ProductSize],

[ProductImageURL],[UnitPrice] FROM [Products]" UpdateCommandType="StoredProcedure"

UpdateCommand="Update_Products"> <UpdateParameters>

95

<asp:Parameter Name="ProductType" Type="String" /> <asp:Parameter Name="ProductName" Type="String" /> <asp:Parameter Name="ProductDescription" Type="String"/> <asp:Parameter Name="ProductSize" Type="String" />

<asp:Parameter Name="ProductImageURL" Type="String" /> <asp:Parameter Name="UnitPrice" Type="Double" />

</UpdateParameters> </asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">

<Columns>

<asp:CommandField ShowEditButton="true"

EditText="<IMG SRC='Images/icon_edit.gif' border=0/>" UpdateText="Update" CancelText="Cancel" />

<asp:BoundField DataField="ProductID"

HeaderText="ProductID"SortExpression="ProductID"/>

<asp:BoundField DataField="ProductType" HeaderText="ProductType" /> <asp:BoundField DataField="ProductName" HeaderText="ProductName" /> <asp:BoundField DataField="ProductDescription"

HeaderText="ProductDescription" />

<asp:BoundField DataField="ProductSize" HeaderText="ProductSize" /> <asp:BoundField DataField="ProductImageURL"

HeaderText="ProductImageURL" />

<asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" /> </Columns>

</asp:GridView> </form>

Kết quả duyệt ví dụ 3.10 và ví dụ 3.11. được cho trong hình 3.23.

Chú ý: Khi thiết kế trong Visual Web Developer ta nên kết hợp giữa hai cửa sổ

Design và Source. Trong cửa sổ Design ta chọn cửa sổ thuộc tính của SqlDataSource như hình 3.24. và thực hiện thiết lập giá trị cho các thuộc tính:

o Thuộc tính UpdateCommandType: Text hoặc StoreProcedure

o Thuộc tính UpdateCommand: Ta click vào nút … để tạo truy vấn trên cửa sổ Command and Paramater Editer hình 3.25.

96

Hình 3.23. Duyệt ví dụ 3.9.

97

Hình 3.25.Cửa sổ Command and Paramater Editer. c) Xóa các bản ghi

Các kỹ thuật thực hiện xóa các bản ghi tương tự như Update các ghi. Tương tự đối với điều khiển data source ta thực hiện khai báo:

1. Khai báo hai thuộc tính DeleteCommand và DeleteCommandType

DeleteCommand="DELETE FROM Products WHERE (ProductID = @ProductID)"

2. Khai báo các tham số <DeleteParameters> <DeleteParameters>

<asp:Parameter Name="ProductID" /> </DeleteParameters>

Ví dụ 3.14. Thực hiện xóa dữ liệu từ điều khiển Grid View (vidu3_15.aspx)

<%@ Page Language="VB" %> <form id="form1" runat="server">

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConn %>" ProviderName="<%$

ConnectionStrings:MyConn.ProviderName %>" UpdateCommand="UPDATE Products SET ProductType = @ProductType, ProductName = @ProductName, ProductDescription =@ProductDescription,

ProductSize = @ProductSize,ProductImageURL= @ProductImageURL, UnitPrice = @UnitPrice WHERE (ProductID = @ProductID)"

SelectCommand="SELECT * FROM [Products]"

DeleteCommand="DELETE FROM Products WHERE (ProductID = @ProductID)">

<DeleteParameters>

<asp:Parameter Name="ProductID" /> </DeleteParameters>

98

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="ProductID">

<Columns>

<asp:CommandField ShowEditButton="True"

EditText="<IMG SRC='Images/icon_edit.gif' border=0/>"/> <asp:CommandField ShowDeleteButton="True"

DeleteText="<img src='Images/icon_delete.gif' border=0/>"/> <asp:TemplateField HeaderText="Image">

<ItemTemplate>

<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl='<%# Eval("ProductImageURL") %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </form> d) Chèn các bản ghi

Để chèn bản ghi ta sử dụng kỹ thuật tương tự như trên thông qua khai báo: 1. Khai báo hai thuộc tính InsertCommand và InsertCommandType

InsertCommand="INSERT INTO Products(ProductID, ProductType, ProductName, ProductDescription, ProductSize, ProductImageURL, UnitPrice)

VALUES (@ProductID, @ProductType, @ProductName, @ProductDescription, @ProductSize,

@ProductImageURL, @UnitPrice)">

2. Khai báo các tham số <InsertParameters> <InsertParameters>

<asp:Parameter Name="ProductID" Type="Int16"/> <asp:Parameter Name="ProductType" Type="String"/> <asp:Parameter Name="ProductName" Type="String"/> <asp:Parameter Name="ProductDescription" Type="String"/> <asp:Parameter Name="ProductSize" Type="String"/>

<asp:Parameter Name="ProductImageURL" Type="String" /> <asp:Parameter Name="UnitPrice" Type="Decimal" /> </InsertParameters>

Ví dụ 3.15. Trong ví dụ dùng GridView để hiển thị và thực hiện các thao tác

Update, Delete; sử dụng DetailView để hiển thị chi tiết từng bản ghi được chọn trong GridView đồng thời cho phép cập nhật dữ liệu(vidu3_16.aspx)

<%@ Page Language="VB" %> <form id="form1" runat="server">

<asp:SqlDataSource ID="SqlDataSource1" runat="server"

ConnectionString="<%$ ConnectionStrings:MyConn %>"

ProviderName="<%$ ConnectionStrings:MyConn.ProviderName %>" UpdateCommand="UPDATE Products SET ProductType = @ProductType,

ProductName = @ProductName, ProductDescription = @ProductDescription, ProductSize = @ProductSize,

ProductImageURL =@ProductImageURL, UnitPrice = @UnitPrice WHERE (ProductID = @ProductID)"

99

SelectCommand="SELECT * FROM [Products]"

DeleteCommand="DELETE FROM Products WHERE(ProductID= @ProductID)">

<DeleteParameters>

<asp:Parameter Name="ProductID" /> </DeleteParameters>

</asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server"

DataSourceID="SqlDataSource1" DataKeyNames="ProductID"> <Columns>

<asp:CommandField ShowEditButton="True"

EditText="<IMG SRC='Images/icon_edit.gif' border=0;"/> <asp:CommandField ShowDeleteButton="True" DeleteText= "<img src='Images/icon_delete.gif' border=0/>"/>

<asp:TemplateField HeaderText="Image"> <ItemTemplate>

<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl='<%# Eval("ProductImageURL") %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </form>

Kết quả cho trong hình 3.26.

Hình 3.26. Duyệt ví dụ 3.15. Chú ý:

- Để Upload một file lên Server ta dùng điều khiển FileUpload

- Để tạo Download một file và mở chúng ta sử dụng thẻ Hyperlink <a>, địa chỉ URL phải bao gồm server path và file name bao gồm cả tên mở rộng.

100

<a href="Images/backblue.gif"> Mở file ảnh </a></div>

Một phần của tài liệu Giáo trình Thiết kế web (Nghề: Quản trị mạng máy tính - Cao đẳng): Phần 2 - Trường CĐ nghề Kỹ thuật Công nghệ (Trang 58 - 66)

Tải bản đầy đủ (PDF)

(77 trang)