RSS

ASP.NET cơ sở

29 Jul

Chương 1: LÀM QUEN VỚI ASP.NET
1. Giới thiệu về ASP.NET
– Là một công nghệ mang tính cách mạng dùng để phát triển các ứng dụng về mạng hiện nay cũng như trong tương lai.
– Là một phương pháp tổ chức hay khung tổ chức (framework) để thiết lập các ứng dụng mạnh cho mạng dựa trên CLR (Common Language Runtime) chứ không phải là một ngôn ngữ lập trình.

2. Khác biệt giữa ASP.NET và ASP
– ASP.NET được xây dựng lại từ số không, được thay đổi tận gốc rễ và phát triển phù hợp với yêu cầu hiện nay.
– ASP được thiết kế riêng biệt và nằm ở tầng phía trên hệ điều hành Windows và Internet Information Server, do đó các công dụng của nó hết sức rời rạc và giới hạn; trong khi đó ASP.NET là một cơ cấu trong các cơ cấu của hệ điều hành Windows dưới dạng nền hay khung .NET (.NET framework), do vậy, ASP.NET không những có thể dùng các object của các ứng dụng cũ mà còn có thể sử dụng tất cả mọi tài nguyên mà Windows có.
– Tập tin của ASP.NET có phần mở rộng là .aspx, còn tập tin của ASP có phần mở rộng là .asp
– Tập tin của ASP.NET được phân tích cú pháp (parsed) bởi XSPISAPI.DLL, còn tập tin của ASP được phân tích bởi ASP.DLL
– ASP.NET là kiểu mẫu lập trình phát động bằng sự kiện (event driven), còn ASP được thi hành theo thứ tự tuần tự từ trên xuống dưới.
– ASP.NET sử dụng trình biên dịch (compiled code) nên rất nhanh, còn ASP dùng trình thông dịch (interpreted code) do đó hiệu suất và tốc độ phát triển chậm hơn.
– ASP.NET hỗ trợ gần 25 ngôn ngữ lập trình mới với .NET và chạy trong môi trường biên dịch (compiled enviroment), còn ASP chỉ chấp nhận VBScript và JavaScript nên ASP chỉ là một scripted language trong môi trường thông dịch (in the interpreter environment). Không những vậy, ASP.NET còn kết hợp nhuần nhuyễn với XML để chuyển vận các thông tin qua mạng.
– ASP.NET hỗ trợ tất cả các browser và quan trọng hơn nữa là hỗ trợ các thiết bị lưu động (mobiles devices). Chính các thiết bị lưu động, mà mỗi ngày càng phổ biến, đã khiến việc dùng ASP trong việc phát triển mạng nhằm vươn tới thị trường mới đó trở nên vô cùng khó khăn.

3. Phương pháp làm việc trong mạng
a. Kiểu mẫu Request / Response
Kiểu mẫu này chính là toàn bộ phương pháp làm việc theo kiểu Client / Server hiện dùng với ASP. Gồm 4 bước:
– Client (thông qua Internet Browser) xác định vị trí của Web Server qua 1 URL, ví dụ như: http://www.tuvantinhoc.com
– Client sẽ yêu cầu được tham khảo 1 trang trong mạng đó và thường là trang chủ (home page), ví dụ như: index.html hay default.htm.
– Server đáp ứng bằng cách hoàn trả hồ sơ mà Client đã yêu cầu trước đây.
– Client nhận được hồ sơ gửi về và hiển thị trong browser của mình.
* Lưu ý: một khi Client đã nhận được hồ sơ rồi thì quá trình trao đổi qua lại kết thúc ngay. Sau đó Server và Client không còn liên hệ.

b. Kiểu mẫu event-driven
– Trong kiểu mẫu này, Server sẽ không chờ Client yêu cầu tham khảo 1 trang nào đó trong mạng mà Server đã bố trí và kế hoạch sẵn trước tất cả mọi tình huống để có thể hàng động kịp thời mỗi khi Client quyết định làm 1 điều gì đó. Ta gọi đó là ‘response to your action, còn trong kiểu mẫu trước là ‘response to your request’. Như vậy, ASP.NET có thể phát hiện ra các hành động của Client để phản ứng cho thích hợp.
– Server có thể làm được điều này là dựa vào tiến trình xử lý linh động ở Client (còn gọi là clever client-side processing) để thực hiện kiểu mẫu event-driven này. Tiến trình xử lý ở Client xảy ra khi ta bố trí mã nguồn thích hợp mà Client có thể hiểu được trong các trang ta gửi về cho Client.
* Lưu ý: mặc dù các web page đều nằm ở Server nhưng mã nguồn lại có thể được thực hiện và xử lý hoặc ở Server hoặc ở Client (Server-Side processing và Client-Side processing) tuỳ theo cách bố trí. Các mã nguồn ở Client và Server là hoàn toàn khác biệt và không có tác động hỗ trợ với nhau. Có nghĩa là máy Client sẽ chịu trách nhiệm thi hành các mã nguồn dành cho mình cũng như máy Server chỉ chạy các mã nguồn dành cho Server.
Thông tin hay nội dung cần thiết ở Server sẽ được chuyển đi dưới dạng ‘plain text command’ để thực hiện các hiệu ứng động (dynamic effect) ở máy Client, ví dụ như: thay đổi hình ảnh (image rollover) hay hiển thị một thông điệp (message box). ASP.NET sẽ dùng các ngôn ngữ mới có trình biên dịch (compiled languages) như C# hay VB.NET để soạn các mã nguồn trong các trang Web ở Server.

4. Net Framework
a. CLR (Common Language Runtime)
– CLR là môi trường để quản lý sự thi hành các mã nguồn (manage the execution of code) mà ta đã soạn ra và biên dịch (write and compile code) trong các ứng dụng. Tuy nhiên, khi biên dịch mã nguồn, ta biên dịch chúng ra thành 1 ngôn ngữ trung gian gọi là Microsoft Intermediate Language (MSIL). Chính MSIL trung gian này là ngôn ngữ chung cho tất cả các ngôn ngữ .NET hiện có, do đó ASP.NET cũng được biên dịch (compile) ra MSIL. Trong khi biên dịch như vậy, các ứng dụng cũng sản xuất ra những thông tin cần thiết để tự quảng cáo chính mình, gọi là metadata. Đến khi chạy 1 ứng dụng, CLR sẽ tiếp quản (take-over) và lại biên dịch (compile) mã nguồn 1 lần nữa ra thành ngôn ngữ gốc (native language) của máy tính trước khi thi hành những tác vụ trong mã nguồn đó.

b. Net Framework Classes
Mọi thứ trong .NET đều là object. Ví dụ như: các trang ASP.NET, các hộp thông điệp hay các nút nhấn.
Các object được tổ chức thành từng nhóm riêng biệt nhe trong 1 thư viện để dễ dàng sử dụng, các nhóm như vậy gọi là namespaces, ta sẽ dùng các namespaces này để nhập (import) các class cần thiết cho ứng dụng của mình.

5. Cài đặt ASP.NET
Để thực thi trang ASP.NET cần phải cài đặt:
– Internet Information Services (IIS) và tạo thư mục ảo Virtual Directory.
– MS Visual Studio.NET

Chương 2. XÂY DỰNG TRANG ASP.NET

I. Phân tích trang ASP.NET đầu tiên

CHƯƠNG 2. XÂY DỰNG TRANG ASP.NET
1. Phân tích ví dụ đầu tiên
<%@ Page Language=”vb” AutoEventWireup=”false” Codebehind=”WebForm1.aspx.vb” Inherits=”welcome1.WebForm1″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<script runat=”server”>
Sub Page_Load(Sender As Object, E As EventArgs)Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
</script>
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name=”GENERATOR” content=”Microsoft Visual Studio .NET 7.1″>
<meta name=”CODE_LANGUAGE” content=”Visual Basic .NET 7.1″>
<meta name=”vs_defaultClientScript” content=”JavaScript”>
<meta name=”vs_targetSchema” content=”http://schemas.microsoft.com/intellisense/ie5″&gt;
</HEAD>
<body MS_POSITIONING=”GridLayout”>
<form id=”Form1″ method=”post” runat=”server”>
<asp:Label id=”lblWelcome” style=”Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px” runat=”server”
Width=”328px” Height=”56px”></asp:Label>
</form>
</body>
</HTML>

Ta nhận thấy code của trang này được chia thành 3 phần riêng biệt:
Phần 1: <%@ Page Language=”VB” … %> được gọi là Page Directives. Phần này cung cấp cho ASP.NET những thông tin đặc biệt để ASP.NET biết cách mà xử lý cũng như những thông tin dùng trong tiến trình biên dịch (during the compiling process); trong đó, bạn muốn ASP.NET dùng VB.NET làm ngôn ngữ lập trình mặc định (default programming language) cho trang web.

Phần 2: <script runat=Server>…</Script>: còn gọi là Code Declaration Block giống như mã ở Client Side nhưng khác một chút là có kèm theo Runat=Server, đây chính là chỉ thị cho ASP.NET biết thi hành trang này ở Server Side, kiểm soát mọi công việc cần thiết và mã được biên dịch (compiled) thành MSIL. Có thể đặt phần này ở bất kỳ đâu trong trang web.
Sub Page_Load(sender as Object, e as EventArgs) Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
Phần code này tạo ra một Procedure có tên là Page_Load() mặc định cho các trang ASP.NET giống như Form_Load trong lập trình ứng dụng. Khi trang được trình bày, ASP.NET sẽ gắn hàng chữ “Xin chào mừng đến với ASP.NET” vào label lblWelcome.

Phần 3: <html>…<html>: đây là nơi bắt đầu code HTML. Phần này chính là hình thức trình bày nội dung của trang được chế biến bởi code ASP.NET trước khi gửi về và hiển thị trong browser của Client. Ngoài ra, ASP.NET cũng cho phép kèm theo những chỉ thị (instructions) trong Code Render Block bắt đầu bằng <% và chấm dứt bằng %>.
Ví dụ: <%Response.Write(“My first page <p>”)%>
để đưa ra những gì bạn muốn làm vào bên trong lòng mã nguồn của phần HTML

1. Phân định code và nội dung
a. Code Inline Model:
Trong kiểu mẫu này, code được viết và giữ (code section) trong các trang ASP.NET nhưng không trộn lẫn với HTML dành cho phần nội dung (Content section):
<%– This is the code section (ASP.NET Code) –%>
<script runat=Server>
Sub Page_Load(sender as Object, e as EventArgs) Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
</script>
<%–This is the content section (HTML Code)–%>
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name=”GENERATOR” content=”Microsoft Visual Studio .NET 7.1″>
<meta name=”CODE_LANGUAGE” content=”Visual Basic .NET 7.1″>
<meta name=”vs_defaultClientScript” content=”JavaScript”>
<meta name=”vs_targetSchema” content=”http://schemas.microsoft.com/intellisense/ie5″&gt;
</HEAD>
<body MS_POSITIONING=”GridLayout”>
<form id=”Form1″ method=”post” runat=”server”>
<asp:Label id=”lblWelcome” style=”Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px” runat=”server”
Width=”328px” Height=”56px”></asp:Label>
</form>
</body>
</HTML>

b. Code Behind Model
Một kiểu mẫu khác được áp dụng để phân định code và nội dung là phần code được sắp xếp trong một tập tin khác riêng biệt ở một chỗ lưu trữ khác hẳn chỗ chứa các trang ASP.NET, dĩ nhiên bạn phân chia như vậy thì phải sắp xếp để 2 tập tin riêng biệt đó có thể làm việc với nhau và được biên dịch cũng giống như kiểu mẫu Code Inline.
Public Class WebForm1
Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
End Class

2. Tiến trình xử lý
Khi có yêu cầu tham khảo trang web, trước hết ASP.NET sẽ biên dịch (compile) code ở phần Code Declaration Block trong trang AsP.NET. Code được biên dịch thành MSIL, CLR quản lý và sau đó biên dịch thành ngôn ngữ gốc của máy (native machine language) trước khi trang được gửi về browser của Client. Code trong trang web sẽ được lưu trữ một nơi riêng biệt, CLR sẽ thăm chừng luôn phòng trường hợp có thay đổi mã nguồn thì lập tức CLR sẽ biên dịch lại 1 cách tự động trang web đó.
Sau khi trang web được biên dịch, AsP.NET bắt đầu tiến trình xử lý tất cả nguồn mã kể cả các sự cố (events) ví dụ như bạn gõ vài chữ trong hộp Text box hoặc click vào một nút nào đó thì AsP.NET engine sẽ nghiên cứu, khảo sát biến cố đó để quyết định cách phản ứng và thi hành để đáp ứng lại biến cố theo kế hoạch lập trình đã quy định trước. Tiếp theo, AsP.NET sẽ biến đổi tất cả các Server Control trong trang web ra thành những yếu tố HTML tương đương.
Ví dụ: <asp:Label> control thành HTML <span></span> để hiển thị hàng chữ “Xin chào mừng đến với AsP.NET”
Cuối cùng, AsP.NET sẽ gửi kết quả dưới dạng HTML đến Client Browser, Client Browser chỉ nhận được trang web dưới dạng HTML thuần túy. Như vậy có thể dùng bất cứ một web browser nào (không nhất thiết MSIL) cũng có thể hiển thị các trang AsP.NET.

II. Cấu trúc điều khiển
1. Phát biểu If Then
If condition Then
[statements]
End If
Cho phép thực hiện khối lệnh (statements) trong cấu trúc này khi điều kiện (condition) trong phát biểu If là đúng
Khối phát biểu có một phát biểu không xuống hàng thì không cần End If
Ví dụ:
Dim x=10, y=0
If x>0 Then y+=x

2. Phát biểu điều khiển If…Then…Elseif…End if
If condition Then
[statements]
ElseIf elseifconditions Then
[elseifStatements]
Else
[elseStatements]
End If

3. Phát biểu rẽ nhánh Select…Case
Select Case TestExpression
Case Expressionlist
[Statements]
Case Else
[elseStatements]
End Select

TestExpression: là biểu thức bắt buộc, giá trị thuộc một trong các loại dữ liệu sau: Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, Short, Single, String.
Expressionlist: phát biểu yêu cầu nằm trong Case, trong Case có thể là mệnh đề hay biểu thức, chúng cách nhau dấu “,”. Ngoài ra các biểu thức trong Case còn sử dụng từ khóa To để diễn giải khoảng giá trị, Is là biểu thức so sánh.
Ví dụ1:
Case 1 To 4,5,6,7, To 9,11,13, Is>MaxNumber
Ví dụ 2:
Dim Number As Integer=8
Select Number
Case 1 to 5 Response.write(“Từ 1 đến 5”)
Case 6,7,8 Response.write(“Từ 6 đến 8”)
Case 8 to 10 Response.write(“Từ 8 đến 10”)
Case Else Response.write(“Không tồn tại giá trị”)
End Select

4. Phát biểu lặp Do…Loop

Dạng 1:

Do While condition ‘Lặp trong khi
[statements]
[Exit Do]
Loop
Do Until condition ‘Lặp cho đến khi
[statements]
[Exit Do]
Loop

Dạng 2:
Do
[statements]
[Exit Do]
[statement]
Loop {While/Until} condition
+ while: vòng lặp được thực hiện cho đến khi condition có giá trị False
+ until: vòng lặp được thực hiện cho đến khi condition có giá trị True
+ Exit Do: cho phép thoát khỏi vòng lặp Do…Loop
Ví dụ: Phát biểu Do…Loop
Dim Check As Boolean=True
Dim Counter As Integer=0
‘ Vòng lặp ngoài với biến Check
Do
Do while Counter<20
‘ Vòng lặp trong biến Counter
Counter+=1
If Counter=10 then
Check=False
Exit Do
‘ Thoát khỏi vòng lặp trong
End if
Loop
‘ Kết thúc vòng Do…Loop ngoài với biến Counter
Loop Until Check=False
‘ Kết thúc vòng Do…Loop ngoài với biến Check

5. Phát biểu while…End while
Thực hiện nhiều phát biểu khi điều kiện condition có giá trị True như cú pháp sau:
while condition
[statements]
End while

+ condition: là biểu thức luận lý bắt buộc, có giá trị True hay False, nếu condition=Nothing thì condition tương với False.
+ statements: một hoặc nhiều phát biểu thực hiện trong khối While khi condition có giá trị True.
Ví dụ: Phát biểu while…End while
Dim Counter As Integer=0
while Counter<20
Counter+=1
End while
Debug.writeline(“Giá trị của biến Counter: ” & Counter)

6. Phát biểu with…end with
Phát biểu được sử dụng trong khi tham chiếu đến đối tượng đơn, hay cấu trúc; with…end with thực hiện nhiều phát biểu như cú pháp sau:
with object
[statements]
end with

+ object: là biểu thức bắt buộc, có giá trị với bất kỳ kiểu dữ liệu, bao gồm cả các kiểu cơ bản nhất.
Ví dụ: biến myLabel là một biến kiểu Label, sau đó sử dụng phát biểu with để gán các thuộc tính vào biến:
with myLabel
.Height=2000
.width=1000
.Text=”Login me!”
end with

Trong trường hợp đối tượng có thuộc tính mẹ, có thể sử dụng phát biểu with
Ví dụ:
with myObject
.Height=2000
.width=1000
.Text=”Login me!”
with .Font
.Color=Red ‘ Tương đương myObject.Font.Color=Red
.Bold=True ‘ Tương đương myObject.Font.Bold=True
end with
end with

7. Phát biểu For Each…In …Next: lặp lại một nhóm phát biểu cho mỗi phần tử trong mảng hay tập hợp:
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
+ element: bắt buộc, sử dụng biến này nhận giá trị của phần tử trong (In) mảng hay tổ hợp, kiểu dữ liệu của element phải cùng kiểu dữ liệu của phương thức trong mảng hay tổ hợp group
+ group: biến đối tượng bắt buộc và được tham chiếu như một mảng hay tổ hợp.
Ví dụ: tìm kiếm đối tượng có Caption là Hello trong tập hợp đối tượng MyCollection
Dim Found As Boolean=False
Dim MyObject, MyCollection As Object
For Each MyObject In MyCollection
If(CStr(MyObject.Text=”Hello”)) Then
Found=True
Exit For
End if
Next

8. Phát biểu For…Next
For counter=start To end [Step step]
[statements]
[Exit For]
[statements]
Next [counter]
+ Counter: bắt buộc, kiểu dữ liệu thông thường là Integer
+ Start: bắt buộc, chính là giá trị xuất phát của biến counter, trong trường hợp này start có cùng kiểu dữ liệu với counter và nằm trong phạm vi cho phép.
+ end: bắt buộc, chính là giá trị kết thúc của counter, trong trường hợp này end có cùng kiểu dữ liệu với counter và nằm trong phạm vi cho phép.
+ step: nếu không cung cấp thì mặc định là 1
Trong trường hợp giá trị start lớn hơn giá trị end phải có giá trị (-).
Ví dụ: vòng lặp For tăng
Dim I As Integer
Dim J As Integer
Dim K As Long
For I=0 To 10
For J=0 To 10
K=I+J
Debug.writeLine(K)
Next J
Next I

Ví dụ 2: Vòng For với biến words có giá trị giảm dần, Digit có giá trị tăng dần
Dim words As Integer
Dim Digit As Integer
Dim MyString As String
For words=10 To 1 Step -1
For Digit=1 To 9
MyString=MyString & CStr(Digit)
Next Digit
MyString=Mystring & ” ”
Next words

III. Các phép toán cơ bản
1. Phép toán trừ bằng (-=)

Cú pháp: variable -= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 -= Var2
Debug.writeLine(“Var1: ” & Var1)

2. Phép toán cộng bằng (+=)
Cú pháp: variable += expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Dim strSQL As String
Debug.writeline(“var1: ” & var1)
Var1 += Var2
Debug.writeLine(“Var1: ” & Var1)
strSQL =”Select * From tblCustomer”
Debug.writeLine(“strSQL: ” & strSQL)
strSQL +=” where active=1″
Debug.writeLine(“strSQL: ” & strSQL)

3. Phép toán nhân bằng (*=)
Cú pháp: variable *= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 *= Var2
Debug.writeLine(“Var1: ” & Var1)

4. Phép toán chia bằng (/=)
Cú pháp: variable /= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 /= Var2
Debug.writeLine(“Var1: ” & Var1)
* Lưu ý: phép chia bằng (/=) có lấy lẻ

5. Phép toán chia bằng (\=) lấy phần nguyên
Cú pháp: variable \= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=3
Debug.writeline(“var1: ” & var1)
Var1 \= Var2
Debug.writeLine(“Var1: ” & Var1)
* Kết quả: var1: 10
var1: 3

6. Chuyển đổi dữ liệu
Cách 1: dùng Ctype
Dim AgeString As String
Dim Age As Integer
AgeString=”25″
Age=Ctype(AgeString, Integer)

Cách 2:
Dim AgeString
Dim Age
AgeString=”25″
Age=Cint(AgeString)

Ví dụ làm một trang web tin tức  :

asp_TinTuc 1

Ta thiết kế 1 CSDL để lưu tin tức
– Làm menu động, lấy dữ liệu từ CSDL

– Ta cần 1 bảng chứ menu
– Tiếp theo là bảng đăng nhập
– 1 Bảng để lưu thông tin bài viết

Vì thời gian ở đây chỉ để hiển thị, ko tính toán gì nên để là nvarchar cho dễ thao tác

—————————
Phần Visual để làm

– Ta add vào server explorer để thao tác cho dễ, đỡ phải mở sql server management lên
0. Connectstring từ web đến CSDL (mở web.config)

<appSettings/>

<connectionStrings>
<add name=”ConnectString” connectionString=”Data Source=MANHHUNG-PC;Initial Catalog=TinTuc;Integrated Security=True”/>
</connectionStrings>

<system.web>

1. Tạo 1 fodel App_Code rồi tạo 1 lớp để thao tác với csdl (class: AccessData)

để lấy được connectstring trong web.cofig, bạn phải khai báo using System.Configuration; (đã có sẵn)
– rồi lấy cái name (như video)
điều này rất thuận lợi khi bạn up lên host, chỉ cần sửa connectstring trong webconfig là xong
– Thêm khai báo using System.Data.SqlClient;

public class AccessData
{
private string ConnectString = ConfigurationManager.ConnectionStrings["ConnectString"].ConnectionString;

public SqlConnection GetConnect()
{
return new SqlConnection(ConnectString);
}

//Hàm trả về 1 datatable
public DataTable GetTable(string sql)
{
SqlConnection con = GetConnect();
SqlDataAdapter ad = new SqlDataAdapter(sql, con);
DataTable dt = new DataTable();
ad.Fill(dt);
con.Close();
return dt;
}

//Hàm thực thi lệnh executenonquery
public void ExeCuteNonquery(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
con.Close();
cmd.Dispose();
}

//Hàm thực thi lệnh ExecuteScalar để trả về 1 giá trị
public string ExecuteScalar(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql,con);
string kq = cmd.ExecuteScalar().ToString();
con.Close();
cmd.Dispose();
return kq;
}
public SqlDataReader ExecuteReader(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}
}

asp_TinTuc 2

– Tạo trang masterpage, nó là cái khung chính của trang mà các trang khác sẽ kế thừa
Như vậy chúng ta sẽ tạo 1 table gồm 4 hàng
add new item mới là masterpage -> nhấn đến mục design -> Tạo bảng với 4 dòng 3 cột, 960 In pixel, Alignment chọn Center
– Nhấn vào td.style2 phần design -> nhấn vào Source -> Nhấn vào Split để dễ làm việc

1. Tìm dòng này

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
.....
</asp:ContentPlaceHolder> 

cắt đi dán vào <td>
&nbsp;</td> vào phần bị gạch đó

xóa phần khóa của dòng trên đi (tức phần này </asp:ContentPlaceHolder>)
asp:ContentPlaceHolder 

Chính là phần để các trang khác ghi nội dung riêng của mình vào

2. Họ xóa Default.aspx đi (Mình thì thay đổi tên của nó để thử thôi đã vì dung phiên bản khác mà )
Add New Item mới là Web Form lấy tên mặc định là Default.aspx
– lựa chọn Select master page
– Để nguyên tên mặc định là Default.aspx
ta được code

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page" %>

<asp:Content ID=”Content1″ ContentPlaceHolderID=”head” Runat=”Server”>
</asp:Content>
<asp:Content ID=”Content2″ ContentPlaceHolderID=”ContentPlaceHolder1″ Runat=”Server”>
</asp:Content>

– Những phần còn lại đã bị cố định, chỉ có ContentPlaceHolder là trang này có thể đánh vào nội dung

3. Hướng dẫn làm Menu

– Xóa từ menu trong trang nền đó đi
– Tạo 1 sitemap đặt tên Menu.sitemap

Demo tạm

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title=""  description="">
<siteMapNode url="Defaul.aspx" title="Trang chủ"  description="" />
<siteMapNode url="google.com.vn" title="Giải trí"  description="" />
<siteMapNode url="dantri.com.vn" title="Game"  description="" />
<siteMapNode url="mp3.zing.vn" title="Ca nhạc"  description="" />
<siteMapNode url="bongda.com.vn" title="Bóng đá"  description="" />
</siteMapNode>
</siteMap

– Vào Navigation chọn Menu nhấn choose a Data Source
+ Nhớ đánh đúng tên sitemap mà mình chọn (ở đây là Menu)
– Nhấn vào SiteMapDataSource – Menu Ở mục SiteMapProvider đặt tên là Menu

4. Chỉnh lại tí trong webconfig

Thêm đoạn code sau (vào web.cofig)

<siteMap defaultProvider="Menu">
<providers>
<add name="Menu" type="System.Web.XmlSiteMapProvider" siteMapFile="~/Menu.sitemap"/>
</providers>

</siteMap>

trước 2 thằng này

</system.web>

<system.codedom>

Là thư mục gốc

5. Nhấn vào Root Node

– phần thuộc tính tìm đến mục Orientation chọn Horizontal là theo chiều ngang
Width chọn 100%
Nhấn vào SiteMapDataSource – Menu trong mục ShowStartingNode chọn False
ShowStartingNode để bằng False nó sẽ không hiện ra nút đầu tiên mà hiện MENU luôn
Nếu để True thì nó xuất hiện nút tam giác, và khi chỉ vào đó thì nó mới hiện MENU

asp_TinTuc 3

Làm Menu cho trang Web, làm Menu 2 lớp lấy từ csdl

thêm code border=”1″ vào

<table align="center" class="style1" border="1"> 

– Giờ ta sẽ tạo trang quản lí Menu, trang này nằm trong quyền của admin nên ta sẽ tạo 1 thư mục Admin để chứa trang này, add vào đây 1 Web Form với tên QuanLiMenu.aspx
* Ta bỏ (không) chọn mục Select master page
– Để làm được Menu 2 lớp bạn thêm trường MenuParent vào
Bản ghi đầu tiên ta để MenuID là 0, ko có tên và ULR
(ảnh)
Như vậy menu game sẽ là con của menu giải trí, khi click vào giải trí sẽ hiện ra menu game cho chúng ta chọn id = 1 tức là game tự ta quy định vậy đi.
Rồi, giờ ta sẽ viết code để nó tự động load lên file sitemap từ đó ta có thể load thành menu
* Nhấn vào Unbound –> Choose Data Source –> <New data source ..> –> Nhấp Database –> OK –> Next –> Next
– Nó sẽ tự tạo 1 connect string mới và lưu vào web.config, lần sau cứ thế sử dụng
Vậy là ta sẽ có 2 connectstring
– Mục Name chọn tbl_Menu –> Tích MenuID và tích MenuName –> Next –>Finish
Mục Select a data field to display in the ListBox –> chọn MenuNam
ô dưới chọn MenuID –> OK
(Ở trên là phần hiện ra cho ta thấy, đặt là MenuNam, ở dưới là giá trị mình chọn)
– Nhấn luôn vào Source để thêm code

AutoPostBack="true" 

WHERE [MenuParent] is NULL 

Ta chỉ chọn các menu mà MenuParent của nó là null vì các menu có MenuParent không null là các menu con, không cần thiết
code
Chọn Menu cha

asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"
DataSourceID="SqlDataSource1" DataTextField="MenuName" DataValueField="MenuID">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:TinTucConnectionString %>"
SelectCommand="SELECT [MenuID], [MenuName] FROM [tbl_Menu] WHERE [MenuParent] is NULL">
</asp:SqlDataSource> 

– Khi ta thêm 1 menu mới sẽ dựa vào đây để thêm
Dropdowlist ko chọn gì tức ID=0
thì mình sẽ thêm 1 menu cha, còn khi chọn menu thì mình thêm vào chính là menu con của menu đã chọn này

– Nhấn GridView1 mục Choose Data Source chọn New data Source.
Các bước làm cũng tương tự như trên
connectstring vừa tạo lúc nãy giờ cứ thế mà sử dụng
Mục Name vẫn chọn tbl_Menu –> ở đây tích vào ô trên cùng (*)

* Nhấn chuột vào nút thêm bắt đầu viết code

using System.Text;
using System.Data.SqlClient; 

– Ta nhận thấy phần code sau ở Menu.sitemap là không thay đổi nên ta nối vào sb

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title=""  description="">

dấu “” có thể thay bằng

<siteMapNode url="Defaul.aspx" title="Trang chủ"  description="" />
<siteMapNode url="google.com.vn" title="Giải trí"  description="" />
<siteMapNode url="dantri.com.vn" title="Game"  description="" />
<siteMapNode url="mp3.zing.vn" title="Ca nhạc"  description="" />
<siteMapNode url="bongda.com.vn" title="Bóng đá"  description="" /> 

là vùng dữ liệu sẽ thay đổi nên ta phải dùng code
– Còn phần này

</siteMapNode>
</siteMap> 

cũng không thay đổi luôn

đoạn giữa
……

SqlDataReader reader = ac.ExecuteReader("select * from tbl_Menu"); // đầu tiên chúng ta sẽ đọc toàn bộ bảng tbl_Menu
while (reader.Read())
{
//Cứ mỗi lần lướt qua 1 menu, ta tìm xem menu đó có menu con không
DataTable dt=ac.GetTable("select MenuName, URL from tbl_Menu where MenuParent=" + int.Parse(reader[0].ToString()) + "");

if (dt.Rows.Count > 0) //Chèn menu có menu con
{
// Thẻ mở
sb.Append(“\n<siteMapNode url='” + reader[2].ToString() + “‘ title='” + reader[1].ToString() + “‘ description='” + “” + “‘>”);// Lưu ý: Trước title có 1 dấu cách, sau là dấu =
for (int i = 0; i < dt.Rows.Count; i++)
{
//Các menu con
sb.Append(“\n<siteMapNode url='” +dt.Rows[i][1].ToString() + “‘ title='” + dt.Rows[i][0].ToString() + “‘ description='” + “” + “‘/>”);// Lưu ý: cho 2 dấu này “‘ sát nhau
}
sb.Append(“\n</siteMapNode>”); //Thẻ đóng của menu cha đây
}
else // Chèn những menu không có menu con
{
if (int.Parse(reader[0].ToString() !=0 && reader[3].ToString == “”))
sb.Append(“\n<siteMapNode url='” + reader[2].ToString() + “‘ title='” + reader[1].ToString() + “‘ description='” + “” + “‘ />”); // Đóng luôn
}
}

sb.Append(“\n</siteMapNode>”);
sb.Append(“\n</siteMap>”);
// Và cuối cùng chúng ta ghi vào file sitemap đó thôi
File.WriteAllText(Server.MapPath(“Menu.sitemap”).ToString(), sb.ToString());

Thêm code

 using System.IO; 

Giả sử đang ở menu 1, chúng ta sẽ tìm xem có menuParent nào có giá trị là 1 không. Nếu không có thì nó không có menu con
Chúng ta sẽ lấy kết quả tìm được cho vào 1 datatable

DataTable dt=ac.GetTable("select MenuName, URL from tbl_Menu where MenuParent=" + int.Parse(reader[0].ToString()) + ""); 

Nếu rows count>0 tức là có kết quả trả về (có menu con)
Chúng ta sẽ hiện ra theo dúng chuẩn
Sửa lại code. Tạo 3 menu con của menu giải trí

<siteMapNode url="giaitri.aspx" title="Giải trí"  description=""  >
<siteMapNode url="game" title="Game"  description="" />
<siteMapNode url="nhac" title="Ca nhạc"  description="" />
<siteMapNode url="video" title="Bóng đá"  description="" />
</siteMapNode>

Menu giải trí lúc này sẽ có cả thẻ đóng và thẻ mở, không như các menu không có menu con
——————————————————————
Khi thêm 1 menu mới, chúng ta phải lấy được menuID lớn nhất hiện tại để tăng lên 1. Vì vậy chúng ta cần 1 hàm tìm MenuID max

DropDownList1.SelectedValue.ToString() 

là menu cha đang được chọn

public int MaxMenuID()
{
int kq = 0;
string sql = "Select Max(MenuID) from tbl_Menu";
try
{
kq = int.Parse(ac.ExecuteScalar(sql));
}
catch
{
kq = 0;
}
return kq;
}

//Khi click thêm
protected void Button1_Click(object sender, EventArgs e)
{
// Đầu tiên,chúng ta insert menu mới vào csdl sau đó gọi hàm WriteSiteMap để ghi lại vào sitemap
// Chúng ta sẽ có 2 trường hợp
// Đầu tiên là dropdownlits không chọn gì (MenuID=0), khi đó ta se insert 1 menu cha
if (int.Parse(DropDownList1.SelectedValue.ToString()) == 0)
{
int MenuID = MaxMenuID() + 1;
ac.ExeCuteNonquery(“insert into tbl_Menu(MenuID, MenuName, URL) values (” + MenuID + “, ‘” + TextBox1.Text + “‘, ‘” + TextBox2.Text + “‘)”);
WriteSiteMap();
}
else // Insert 1 menu con
{
int MenuID = MaxMenuID() + 1;
ac.ExeCuteNonquery(“insert into tbl_Menu values (” + MenuID + “, ‘” + TextBox1.Text + “‘, ‘” + TextBox2.Text + “‘,”+int.Parse(DropDownList1.SelectedValue.ToString())+” )”);
WriteSiteMap();
}
Response.Redirect(“~\\Default.aspx”); // Chuyển về trang default xem kết quả
// Ok, test thử …
}  định dạng lại tí cho đẹp
vào mục MasterPage.master phần thiết kế
– Nhấn Parent Node chọn -> AutoFormat –> Classic –>OK

asp_TinTuc 4
Hướng dẫn tạo trang thêm tin tức và hiển thị tin tức

– Làm nốt phần xóa menu
trong mục Admin/QuanliMenu.aspx.cs Nhấn đúp chuột vào nút xóa cho ta viết thêm code

protected void Button2_Click(object sender, EventArgs e)
{
ac.ExeCuteNonquery("delete from tbl_Menu where MenuID="+int.Parse(TextBox3.Text)+"");
WriteSiteMap();
Response.Redirect("~\\Default.aspx"); //Chuyển về trang default xem kết quả

Phần thêm bài viết

– Vào thư mục Admin –> Add new Item –>Tạo Web FromThemBaiViet.aspx –> OK (các thứ khác để mặc định vậy)
– Nhấn Design. Phần TextBox2 –> Properties –>TextMode chọn MultiLine
Mục (ID) sửa thành txtTomTat
– Ở TextBox1 sửa (ID) thành txtTieuDe
– Nội dung thì dùng 1 editor có sắn đó là FCK Editor
Copy 2 thư mục fckeditoruserfile vào thư mục gốc tin tức của ta
– Tiếp theo là add file dll vào toolbox (file FredCK.FCKeditorV2.dll) Bằng cách vào toolbox kích phải chuột chọn choose item … rồi browse đến file dll đó
Và bây giờ thì có thể kéo nó vào như các control bình thường thôi. Nó sẽ tự nhảy vào thư mục bin
Sửa Height cho nó giá trị 400px
– Tiếp theo là sửa lại trong Web.config
Copy code này trong file aspSetting (kèm theo):

<!--Thay đổi code ở đây-->
<appSettings>
<add key="FCKeditor:BasePath" value="~/fckeditor/"/>
<add key="FCKeditor:UserFilesPath" value="~/userfiles/"/>
</appSettings> 

dán nó vào web.config phần có dòng

<appSettings/>

Sửa Width cho nó giá trị 600px
OK, giờ bạn có thể soạn thảo như trong Word, khi lưu vào CSDL sẽ lưu ở dạng html
– Tạo Text box tên (ID) txtPath
– Tạo 1 label với tên (ID) lbThongBaoKQ
– Nhấn đúp chuột vào nút Tải lên để viết code cho nó
Tạo 1 folder mới với tên là HinhAnh
FileUpload1.HasFile == false tức là không có file được chọn
file.ContentLength>500000 tức dung lượng file lớn hơn 500 kb (khoảng đó) thì thông báo lỗi

protected void Button1_Click(object sender, EventArgs e)
{
HttpPostedFile file = FileUpload1.PostedFile;
if (FileUpload1.HasFile == false || file.ContentLength > 500000)
{
lbThongBaoKQ.Text = "Vui lòng chọn File < 500 kb";
}
else // Nếu file thỏa mãn
{
try
{
string strPath=Server.MapPath("~/HinhAnh/"+FileUpload1.FileName);
FileUpload1.SaveAs(strPath);
txtPath.Text="~/HinhAnh/" + FileUpload1.FileName.ToString();
lbThongBaoKQ.Text="Upload thành công";
}
catch
{
lbThongBaoKQ.Text="Upload thất bại";
}

– Nháy vào Label xóa tên text đi để trắng

* Vào Phần QuanLiMenu phần Design của nó copy DropDownList1 (phần chọn Menu cha)
dán nó vào phần Design của ThemBaiViet
Copy cả SqlDataSource – SqlDataSource1 vào phần Design của ThemBaiViet nữa

– Chúng ta sẽ viết 1 store procedure để thêm bài viết nữa
Vào tbl_BaiViet nháy chuột phải chọn Open Table Definition Mục đích là xem lại thông số để viết code cho chính xác thôi
Save được nghĩa là câu lệnh của ta đúng, nếu bạn đánh sai nó sẽ không Save được
– Nháy đúp vào nút Thêm bài viết để viết code cho nó
– Viết thêm

using System.Data.SqlClient;

Chúng ta sẽ viết 1 lớp bài viết để thao tác cho nó chuyen nghiệp hơn
– Vào mục App_Code nhấn chuột phải chọn Add New Item … chọn class đặt tên là BaiViet.cs –> Add Rồi ta viết code cho nó luôn

using System.Data.SqlClient;
public class BaiViet
{
// Khai báo các thuộc tính
public int MaBaiViet { get; set; } //Sửa lại ở đây
public string TieuDe { get; set; }
public string TomTat { get; set; }
public string NoiDung { get; set; }
public string HinhAnh { get; set; }
public string NgayTao { get; set; }
public string NguoiTao { get; set; }
public int MenuID { get; set; }

AccessData ac = new AccessData();
//Các phương thức
public void Insert(BaiViet bv)
{
SqlConnection con = ac.GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(“ThemBaiViet”, con);
cmd.CommandType = System.Data.CommandType.StoredProcedure; //Thêm lại ở đây
cmd.Parameters.Add(“@MaBaiViet”, System.Data.SqlDbType.BigInt).Value = bv.MaBaiViet;
cmd.Parameters.Add(“@TieuDe”, System.Data.SqlDbType.NVarChar).Value = bv.TieuDe;
cmd.Parameters.Add(“@TomTat”, System.Data.SqlDbType.NText).Value = bv.TomTat;
cmd.Parameters.Add(“@NoiDung”, System.Data.SqlDbType.NText).Value = bv.NoiDung;
cmd.Parameters.Add(“@HinhAnh”, System.Data.SqlDbType.NVarChar).Value = bv.HinhAnh;
cmd.Parameters.Add(“@NgayTao”, System.Data.SqlDbType.NVarChar).Value = bv.NgayTao;
cmd.Parameters.Add(“@NguoiTao”, System.Data.SqlDbType.NVarChar).Value = bv.NguoiTao;
cmd.Parameters.Add(“@MenuID”, System.Data.SqlDbType.TinyInt).Value = bv.MenuID; //Sửa lại ở đây

cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
}
}

Vào Admin/QuanLiMenu copy đoạn code

public int MaxMenuID()
{...} 

dán vào Admin/ThemBaiViet SỬA LẠI 1 CHÚT THÀNH MaxMaBaiViet ….

AccessData ac = new AccessData();
public int MaxMaBaiViet()
{
int kq = 0;
string sql = "Select Max(MaBaiViet) from tbl_BaiViet";
try
{
kq = int.Parse(ac.ExecuteScalar(sql));
}
catch
{
kq = 0;
}
return kq;
}

BaiViet bv = new BaiViet();
protected void Button2_Click(object sender, EventArgs e)
{
bv.MaBaiViet = MaxMaBaiViet() + 1;
bv.TieuDe = txtTieuDe.Text;
bv.TomTat = txtTomTat.Text;
bv.NoiDung = FCKeditor1.Value;
bv.HinhAnh = txtPath.Text;
bv.NgayTao = DateTime.Now.ToShortDateString();
bv.NguoiTao = “abc”;
bv.MenuID = int.Parse(DropDownList1.SelectedValue.ToString());
}

* Vì chưa tạo Form đăng nhập nên sẽ không có session để lấy tên người tạo chúng ta cứ dùng tạm abc
– Tạo thêm 1 Label sau nút Thêm bài viết rồi viết thêm vào code trên tiếp (ĐÂY LÀ SỦA LẠI)

int mbv = MaxMaBaiViet() + 1;
try
{
bv.MaBaiViet = mbv ;
bv.TieuDe = txtTieuDe.Text;
bv.TomTat = txtTomTat.Text;
bv.NoiDung = FCKeditor1.Value;
bv.HinhAnh = txtPath.Text;
bv.NgayTao = DateTime.Now.ToShortDateString();
bv.NguoiTao = "abc";
bv.MenuID = int.Parse(DropDownList1.SelectedValue.ToString());

bv.Insert(bv);
}
catch (SqlException ex)
{
Label1.Text = ex.Message.ToString();
}

Phần Design của Admin/ThemBaiViet Nhấn Source để sửa code thêm

validateRequest="false"

vào dòng đầu tiên

<%@ Page Language="C#" AutoEventWireup="true" validateRequest="false" CodeFile="ThemBaiViet.aspx.cs" Inherits="Admin_ThemBaiViet" %> 

ok. phù… chúng ta chạy thử ! ^^

asp_TinTuc 5

Hướng dẫn làm trang hiển thị tin tức
– Vào tin tức tạo 1 Web Form mới đặt tên BaiViet.aspx Tích vào 2 lựa chọn (chọn cả) –> Add –> OK
– Nhấn Design vào toolbox chọn GridView1 đặt Width cho nó là 100%
Chọn 1 SqlDataSource –> Configure Data Source –> Chọn TinTucConnectionString –> Tích chọn MaBaiViet, TieuDe, TomTat, HinhAnh, NgayTao –> Finish
– Ở SiteMapDataSource – Menu mục Choose Data Source chọn SqlDataSource1. Nhấn Edit Columns –> Mục Selcted fields ta xóa hết chúng đi. Ở mục Available field nhấn chọn TemplateField –> OK
Chọn tiếp Edit Templates

* Mở Website của dân trí .com.vn ta làm tin tức dựa theo dạng như vậy
– Vào Toolbox chọn Image vào đặt thuộc tính cho nó Width là 70px, Height là 70px
– Tiêu đề là 1 cái link. Vào Toolbox lấy 1 HyperLink –> Nhấn Edit DataBingdings –> Nhấn Text –> Mục Bound chọn TieuDe
Nhấn NavigateUrl (Là cái trang mà ta sẽ nhảy tới khi Click vào) –> Mục Bound to: chọn MaBaiViet –> Tích chọn mục Custom bingding –> Viết thêm code ở trong là

Eval("MaBaiViet","noidung.aspx?mbv={0}")
--> OK
 Ta sẽ nhảy tới trang noidung.aspx với mã bài viết được truyền ở querystring {0} đại diện cho 1 số (mã nào đó) ứng với mabaiviet
 * Tiếp theo là tóm tắt
 - Vào toolbox lấy label --> Nhấn Text --> Mục Bound to chọn TomTat -->OK
 - Vào GridView1 chon lại Edit ... đặt lại thuộc tinh ShowHeader cho nó là False

 Các bài viết trong đây sẽ được load tùy theo menu tương ứng, vì vậy chúng ta phải truyền Mã tương ứng cho nó
 - Nhấp chuột vào SqlDataSource --> chọn ConfigureData Source --> Tích lại các cái như cũ là: MaBaiViet, TieuDe, TomTat, HinhAnh, NgayTao --> Nhấn WHERE --> mục columID chọn MenuID, Mục Operator chọn =, Mục Source chọn QueryString, Mục QueryString field chọn mid --> Add --> Next --> Finish

 * Phần Design của BaiViet.aspx nhấn GridView1 chọn Edit ItemTemplace --> Nhấn vào phần Ảnh chọn Edit DataBingdings... Nhấn ImageUrl mục Bound to: chọn HinhAnh --> OK

 ---------------------
 Làm trang hiển thị nội dung
 Vào mục gốc chọn Add new item mới là Web Form với tên Noidung.aspx chọn cả 2 tích --> Add --> vào Design của nó
 - Lấy 1 DataList ở toolbox --> Chọn thuộc tính cho nó với Width là 100%
 - Lấy 1 SqlDataSource --> chọn Cofigure Data Source .. --> Mục tbl_BaiViet tích chon TieuDe, Noi Dung --> Where --> Column chọn MaBaiViet , Mục Source chọn QueryString, Mục QueryString field gõ mbv --> Add --> OK --> Next --> Finish
 (Của mình làm khác: Column chọn MaBaiViet , Mục Source chọn QueryString, Mục QueryString field gõ mid --> Add --> OK --> Next --> Finish ==>Vậy mới hiện được nội dung của bài viết lên Web)
 - Nhấn DataList chọn Data Source là SqlDataSource1 --> Edit Template --> Xóa bên trong Vào toolbox đưa Label vào -->Edit Data bindings.. --> Nhấn Text --> Boundto: TieuDe --> OK
 Vào toolbox Lấy thêm Literal --> Edit Data bindings.. --> Nhấn Text --> Boundto: Noidung --> OK
 - Nhấp vào DataList chọn End Templeyte Editing -->chạy thử
 - Mục Label chọn thuộc tính cho nó Font Chữ đậm, cỡ chữ X-large, mầu xanh




 
Leave a comment

Posted by on July 29, 2011 in Software

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: