Trong 1 class ta cần phân biệt rõ và làm quen các khái niệm sau: trường(field), biến(property) và phương thức (method)
Sau đây mình ví dụ 1 class HocSinh
public class HocSinh
{
string hoten;//khai báo thế này thì hoten là 1 truong(field) dạng private
// giống khai báo private string hoten;
public string HoTen //khai bao 1 bien(property) co ten la HoTen
{
get{ return hoten;}//đọc giá trị lên từ field hoten gán cho biến HoTen
set { hoten = value;}//lấy giá trị(value) truyền vào cho biến để gán cho trường
}
public HocSinh()//phương thức mặc định
{}
public int TimHocSinh(string ten)//day la 1 phuong thuc
{
//code xu ly tim hoc sinh
}
}
Bạn nhìn lại đoạn code trên và ta thấy rằng khai báo biến khác với 1 phương
thức là nó không có phần dấu (). Phương thức là ta dùng viết code Tìm, Thêm ,
Xóa, Sửa hoặc 1 thao tác gì đó do bạn tự viết. Đa số chúng ta ít khai báo biến. vì
sao? vì đa số các bạn mới làm quen lập trinh C# thường khai báo 1 trường(field)
ở dạng public(vd: public string hoten.
Nhưng để baỏ mật các lập trình viên chuyên
15 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2755 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Trong 1 class ta cần phân biệt rõ và làm quen các khái niệm sau: trường(field), biến(property) và phương thức (method), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Trong 1 class ta c n phân bi t rõ và làm quen các khái ni m sau: tr ng(field),ầ ệ ệ ườ
bi n(property) và ph ng th c (method). Sau đây mình ví d 1 class HocSinhế ươ ứ ụ
public class HocSinh
{
string hoten;//khai báo th này thì hoten là 1 truong(field) d ng privateế ạ
// gi ng khai báo private string hoten;ố
public string HoTen //khai bao 1 bien(property) co ten la HoTen
{
get{ return hoten;}//đ c giá tr lên t field hoten gán cho bi n HoTenọ ị ừ ế
set { hoten = value;}//l y giá tr (value) truy n vào cho bi n đ gán cho tr ngấ ị ề ế ể ườ
}
public HocSinh()//ph ng th c m c đ nhươ ứ ặ ị
{}
public int TimHocSinh(string ten)//day la 1 phuong thuc
{
//code xu ly tim hoc sinh
}
}
B n nhìn l i đo n code trên và ta th y r ng khai báo bi n khác v i 1 ph ngạ ạ ạ ấ ằ ế ớ ươ
th c là nó không có ph n d u (). Ph ng th c là ta dùng vi t code Tìm, Thêm ,ứ ầ ấ ươ ứ ế
Xóa, S a..ho c 1 thao tác gì đó do b n t vi t. Đa s chúng ta ít khai báo bi n. vìử ặ ạ ự ế ố ế
sao? vì đa s các b n m i làm quen l p trinh C# th ng khai báo 1 tr ng(field)ố ạ ớ ậ ườ ườ
d ng public(vd: public string hoten;). ở ạ
Nh ng đ ba m t các l p trình viên chuyên nghi p hay khai báo d ng privateư ể ỏ ậ ậ ệ ở ạ
nh ví d trên. N u khai báo private nh v y thì n u b n đang 1 class khác b nư ụ ế ư ậ ế ạ ở ạ
s không nhìn th y 1 tr ng private và s không truy xu t đc nó. Do v y trong C#ẽ ấ ườ ẽ ấ ậ
h tr khai báo bi n đi cùng v i 2 ph ng th c get và set đ giúp chúng ta gi iỗ ợ ế ớ ươ ứ ể ả
quy t v n đ v a nêu. ng v i m i 1 tr ng private thì ta nên khai báo 1 bi n vàế ấ ề ừ Ứ ớ ỗ ườ ế
bi n cùng ki u v i tr ng. đo n code trên do tr ng "hoten" có ki u string nênế ể ớ ườ ở ạ ườ ể
khai báo bi n HoTen ph i có ki u tr v là string.ế ả ể ả ề
Ta dùng "get" đ l y giá tr c a field gán cho bi n(property), "set" dùng giá tr c aể ấ ị ủ ế ị ủ
bi n đ thi t l p giá tr cho field.ế ể ế ậ ị
N u nh 1 bi n nào đó b n ch cho ng i ta l y(đ c) giá tr t field lên thôi thìế ư ế ạ ỉ ườ ấ ọ ị ừ
b n ch c n dùng ph ng th c get.ạ ỉ ầ ươ ứ
Ví d 1 class khác ta khai báoụ ở
HocSinh hs = new HocSinh();
khi b n g i: hs.HoTen = "NguyenVanA" thì ph ng th c set{} s đ c g i, sauạ ọ ươ ứ ẽ ượ ọ
khi ch y xong câu l nh này thì th c ch t hs.hoten ="NguyenVanA" do set{hoten =ạ ệ ự ấ
value;}
và khi b n g i: string name = hs.HoTen thì ph ng th c get{} s đ c g i, giá trạ ọ ươ ứ ẽ ượ ọ ị
c a hs.HoTen là giá tr đ c lên t hs.hoten v i l nh get {return hoten;}ủ ị ọ ừ ớ ệ
Tác d ng c a 2 Ph ng th c get và set giúp cho vi c truy xu t giá tr c a 1ụ ủ ươ ứ ệ ấ ị ủ
1
tr ng đ c b o m t h n. Chúng nh là công c trung gian đ v n chuy n giáườ ượ ả ậ ơ ư ụ ể ậ ể
tr c a field v i giá tr ng i dùng(nh p dl). Và khi đã làm nh v y ta có th quênị ủ ớ ị ườ ậ ư ậ ể
tr ng đi và thao tác v i bi n nh là mình đang thao tác v i tr ng v y. ườ ớ ế ư ớ ườ ậ
Có 1 cái hay n a trong cách dùng ph ng th c set là ta có th ki m soát, ki m traữ ươ ứ ể ể ể
giá nh p vào có h p l theo ý ta ko. n u h p l thì ta m i cho gán vàoậ ợ ệ ế ợ ệ ớ
tr ng(field). Ví d ta có thêm tr ng maHS đ l u thông tin mã h c sinh v iườ ụ ườ ể ư ọ ớ
yêu c u mã có chi u dài là 7. thì ta làm string maHS;ầ ề
public string MaHS
{
get { return maHS; }
set
{
while (value.Length != 7)// kiem tra neu ko hop le thi nhap lai
{
Console.Write("\n Ma khong hop le! Nhap lai = ");
value = Console.ReadLine();
}
maHS = value;//khi nao chieu dai chuoi nhap vao la 7 thi moi gan cho
tr ng maHSườ
}
}
nh sau:ư
L p trình C# | Bàn v kích th c và v trí c a Formậ ề ướ ị ủ
L p ớ Form cung c p nh ng thu c tính Location (v trí) và Size (kích th c) màấ ữ ộ ị ướ
m i ô control đ u có, nh ng v i m t “méo mó” m t chút. Thu c tính Locationỗ ề ư ớ ộ ộ ộ
cho bi t kho ng cách góc top left c a c a s so v i góc top left c a ế ả ở ủ ử ổ ớ ủ màn hình
(ho c desktop area) tr đi. Ngoài ra, Location s b ph t l tr khi thu c tínhặ ở ẽ ị ớ ờ ừ ộ
StartPosition đ c cho v ượ ề Manual. Các tr c a thu c tính StartPosition s l y tị ủ ộ ẽ ấ ừ
enum FormStartPosition, nh d i đây:ư ướ
Các trị Mô tả
CenterParent N u form đ c hi n th theo ki u modal, thì nó s đ c canh gi aế ượ ể ị ể ẽ ượ ữ
t ng đ i v i bi u m u hi n th nó. N u bi u m u này không có cha-m , thì đ tươ ố ớ ể ẫ ể ị ế ể ẫ ẹ ặ
đ này gi ng nh ể ố ư WindowsDefaultLocation
CenterScreen form đ c căn gi a ượ ữ màn hình. Ví d : StartPosition =ụ
2
FormStartPosition.CenterScreen
Manual form s đ c canh theo v trí đ c khai báo b i thu c tính Location,ẽ ượ ị ượ ở ộ
t ng đ i so v i top left c a desktop areaươ ố ớ ủ
WindowsDefaultLocation form đ c hi n th theo v trí m c nhiên c a Windows.ượ ể ị ị ặ ủ
Nói cách khác, s không bi t chính xác bi u m u s đ c canh v đâuẽ ế ể ẫ ẽ ượ ề
WindowsDefaultBound form đ c hi n th theo v trí m c nhiên c a Windows v iượ ể ị ị ặ ủ ớ
m t kích th c m c nhiên (thu c tính Size b b qua). Thi t đ t này ít khi dùngộ ướ ặ ộ ị ỏ ế ặ
t i vì thông th ng ng i ta mu n đi u khi n chính xác kích th c c a bi uớ ườ ườ ố ề ể ướ ủ ể
m uẫ
Th nh tho ng, b n c n c n th n 1 chút khi ch n v trí và kích th c đ i form c aỉ ả ạ ầ ẩ ậ ọ ị ướ ố ủ
b n. Thí d , b n có th vô tình t o ra 1 form quá l n đ có th thích nghi v i 1ạ ụ ạ ể ạ ớ ể ể ớ
màn hình có đ phân gi i th p. N u b n làm vi c v i 1 ng d ng ch đ c nh t 1ộ ả ấ ế ạ ệ ớ ứ ụ ỉ ộ ấ
form, gi i pháp t t nh t là t o 1 form có th thay đ i kích th c. N u b n dùng 1ả ố ấ ạ ể ổ ướ ế ạ
ng d ng v i nhi u c a s bay lung tung thì câu tr l i là không đ n gi n chútứ ụ ớ ề ử ổ ả ờ ơ ả
nào.
T t nhiên, b n s nghĩ mình có th gi i h n v tr c a s vào v trí mà nh ng ấ ạ ẽ ể ớ ạ ị ị ử ổ ị ữ màn
hình có đ phân gi i nh có th h tr , nh ng làm v y thì thi t thòi cho nh ngộ ả ỏ ể ỗ ợ ư ậ ệ ữ
ng i s d ng đang s h u ườ ử ụ ở ữ màn hình có đ phân gi i cao (do nhu c u v thi tộ ả ầ ề ế
k đ h a,đ c bi u m u,…). Và câu h i mà tôi đ t ra cho b n là ph i tìm v tríế ồ ọ ọ ể ẫ ỏ ặ ạ ả ị
thích h p nh t c a form đ i v i ợ ấ ủ ố ớ màn hình c a ng i s d ng. Mu n gi i quy t,ủ ườ ử ụ ố ả ế
b n c n tìm l i nh ng thông tin c b n đ i v i m t b ng ạ ầ ạ ữ ơ ả ố ớ ặ ằ màn hình có s n sẵ ử
d ng đ n l p ụ ế ớ Screen
Code:
private void Form_Load(sender,EventArgs e) //event Load c a Formủ
{
Screen scr = Screen.PrimaryScreen; //đi l y ấ màn hình chính
this.Left = (scr.WorkingArea.Width – this.Width)/2;
3
this.Top = (scr.WordkingArea.Height – this.Height)/2;
}
Ví d trên s d ng thu c tính WorkingArea c a l p Screen. Thu c tính này trụ ử ụ ộ ủ ớ ộ ả
v vùng làm vi c c a ề ệ ủ màn hình, tr đi vùng chi m d ng b i thanh taskbar, b iừ ế ụ ở ở
thanh công c c p b n (docked toolbar), và b i các c a s c p b n (dockedụ ậ ế ở ử ổ ậ ế
windows).
Và d i đây li t kê các thành viên c a l p Screen:ướ ệ ủ ớ
Các thành viên Mô tả
PrimaryScreen Hàm static này tr v 1 đ i t ng Screen t ng tr ng cho ả ề ố ượ ượ ư màn
hình chính trên h th ng.ệ ố
Bounds Hàm này tr v 1 c u trúc Rectangle t ng tr ng cho biên gi i c a vùngả ề ấ ượ ư ớ ủ
hi n th (display area) đ i v i ể ị ố ớ màn hình hi n hành.ệ
WorkingArea Hàm này tr v 1 c u trúc Rectangle t ng tr ng cho biên gi iả ề ấ ượ ư ớ
vùng hi n th đ i v i ể ị ố ớ màn hình hi n hành, tr đi kho ng m t b ng chi m d ngệ ừ ả ặ ằ ế ụ
b i thanh taskbar, thanh công c c p b n, và b t c c a s c p b n nào.ở ụ ậ ế ấ ứ ử ố ậ ế
DeviceName Hàm này tr v tên thi t b đ c g n li n v i 1 ả ề ế ị ượ ắ ề ớ màn hình theo d ngạ
1 chu i ỗ
G ai thích ph ng th c ph ng th c convert trong net ỉ ươ ứ ươ ứ Có 2 cách convert t chu iừ ỗ
sang s . Cách 1 là cách c a b n: Convert.ToInt32(s);ố ủ ạ
Cách 2 là: Int32.Parse(s)
Mình đã test cách 2 nhanh h n cách 1 tí xíu (2144-2071). Nh ng cách 1 hay h n vì nóơ ư ơ
tr c quan và convert sang ki u nào cũng đ c. Còn cách 2 có 4 hàm thôi thì ph i. Chự ể ượ ả ả
hi u .NET nó cho 2 cái đ làm gì ể ể
Cách 2 thì t t nhiên nhanh h n, vi c cung c p 2 cách chuy n đ i này đ phù h p v iấ ơ ệ ấ ể ổ ể ợ ớ
t ng m c đích s d ng. Cách convert s lâu h n vì nó ph i ki m tra d li u tr c khiừ ụ ử ụ ẽ ơ ả ể ữ ệ ướ
th c hi n chuy n đ i, tùy theo ki u c n chuy n mà giá tr tr v c a nó s khác cácự ệ ể ổ ể ầ ể ị ả ề ủ ẽ
4
Parse hay ko, ví d n u Convert.ToInt32() m t đ i t ng null thì s tr v 0, còn n uụ ế ộ ố ượ ẽ ả ề ế
dùng Parse() thì
s b ném ra 1 exception. Ngoài cách dùng Parse b n có th dùng TryParse() đ h nẽ ị ạ ể ể ạ
ch exception, thay vì ném ra 1 exception thì phu ng th c TryParse() s tr v falseế ơ ứ ẽ ả ề
Ca Nguyen
Tôi không gi i, nh ng tôi là duy nh tỏ ư ấ
Tìm ki m: ế
• Trang chủ
Bài vi tế Ph n h iả ồ
• C#
o Nh ng cái m i trong C# 2010ữ ớ
• Khác
• .Net 4.0
← MEF (Managed Extensibility Framework)
S d ng C# k t n iử ụ ế ố Database →
B n c n đ a “2 tri u s ” vàoạ ầ ư ệ ố
combobox? Làm cách nào để
nhanh nh t?ấ
19.11.2010 b i ở canh1412 2 ph n h iả ồ
1 Vote
Control Combobox r t quen thu c v i ng i l p trình,nh ng đã có lúc nào b n đã thêmấ ộ ớ ườ ậ ư ạ
m t s l ng l n d li u vào combobox ch a? kho ng 2 tri u s xem sao? t c s có 2ộ ố ượ ớ ữ ệ ư ả ệ ố ứ ẽ
tri u m c trong combobox….ệ ụ
Đ c đi m c a combobox, ch khi nào toàn b d li u đ c đ a vào trong Comboboxặ ể ủ ỉ ộ ữ ệ ượ ư
thì chúng m i show lên.ớ
Bài này xin gi i thi u s d ng combobox k t h p v i constrol VSscrollBar và controlớ ệ ử ụ ế ợ ớ
timer.
Ý t ng nh sau: Ta th y r ng không c n thi t m t s l ng c c l n d li u vào m tưở ư ấ ằ ầ ế ộ ố ượ ự ớ ữ ệ ộ
lúc nh th , ta ch c n đ a vào s l ng d li u c n thi t đúng b ng chi u caoư ế ỉ ầ ư ố ượ ữ ệ ầ ế ằ ề
5
combobox/ chi u cao c a m i items. V n đ là khi nào c n th y đ i giá tr d li uề ủ ỗ ấ ề ầ ấ ổ ị ữ ệ
trong combobox? Đó là lúc ng i dùng kéo thanh crollbar, thanh crollbar t đ ng c aườ ự ộ ủ
combobox không x lí đ c v n đ này, vì v y ta s s d ng VScrollBar c a VS.ử ượ ấ ề ậ ẽ ự ụ ủ
Đ làm rõ h n, mình xin l y ví d : tìm t t c các s r t h nh phúc và r t không h nhể ơ ấ ụ ấ ả ố ấ ạ ấ ạ
phúc. s r t hành phúc là s có 8 ch s ,và đó là s nguyên t có t ng các ch s n aố ấ ố ữ ố ố ố ổ ữ ố ữ
đ u b ng n a cu i, ví d 10010101 là s r t h nh phúc,còn r t không h nh phúc là sầ ằ ữ ố ụ ố ấ ạ ấ ạ ố
nguyên t không có t ng n a đ u b ng n a cu i.ố ổ ứ ầ ằ ữ ố
Ta thi t kê giao di n: (VS2010-C#)ế ệ
Đâu tiên khai báo hai m ng ch a s :ả ứ ố
S d ng thu t toán sàn đ l c s nguyên t :ử ụ ậ ể ọ ố ố
6
Thu c tính quan tr ng c a VScrollBar là Minimum , Maximum, chúng ta c n kh i gánộ ọ ủ ầ ở
giá tr cho nó đ xác đ nh kho ng thay đ i, thu c tính value đ l y giá tr hi n t i c aị ể ị ả ổ ộ ể ấ ị ệ ạ ủ
VScrollbar .
Bitarray là m t ki u d li u trong C# nó t ng đ ng v i khai báo “bool[] mang”ộ ể ự ệ ươ ươ ớ
nh ng là vi c nhanh h n và thu n ti n h n, trong tr ng h p này. ” len đây tính raư ệ ơ ậ ệ ơ ườ ợ ở
s l ng items mà chúng ta th y trong combobox,ố ượ ấ
Load vào combobox:
Hàm này có tác d ng đ a d li u vào combobox, s l ng đ a vào là tùy thu c thamụ ư ữ ệ ố ượ ư ộ
s “len2″;.ố
Ti p theo, đ có th c p nh t, t c s d ng hàm trên đ thay đ i d li u trênế ể ể ậ ậ ứ ử ụ ể ổ ữ ệ
combobox, ta c n dùng timer đ kích ho t hàm trên:ầ ể ạ
7
giatricubo kh i gán lúc đ u b ng 1: khi ta kéo vScrollbar t c đã làm value c aở ầ ằ ứ ủ
VScrollBar thay đ i. khi đó hàm s đ c g i, ta đình thu c tình interval c a timer làổ ẽ ượ ọ ộ ủ
50milisecond.
Cu i cùng x lí event click c a button:ố ử ủ
ta ch đ a s l ng d li u v a đ vào trong combobox: " lencbo =ỉ ư ố ượ ữ ệ ừ ủ
lstSoRatKhongHanhPhuc.Height / lstSoRatKhongHanhPhuc.ItemHeight;"
Làm theo cách này, v i bài này ch m t kho ng 7s là đã ch y đ c ch ng trình. theoớ ỉ ấ ả ạ ượ ươ
cách thông th ng, mình ch y th 30' không xong^^.ườ ạ ử
Trên đây mình ch trình bày v hi n th s r t không h nh phúc, còn s h nh phúc thìỉ ề ệ ị ố ấ ạ ố ạ
t ng t nhé!ươ ự
Source code:T i vả ề
SqlCommandBuilder đ làm gìể
Ko bi t m i ng i đã bi t công d ng c a nó ch a? Nh ng mình thì m i bi t (ch cế ọ ườ ế ụ ủ ư ư ớ ế ắ
th y có nói nh ng l i đi h c nên gi m i bi t ầ ư ườ ọ ờ ớ ế )
Nguyên văn c a Microsoftủ
you can create a SqlCommandBuilder object to automatically generate Transact-
SQL statements for single-table updates if you set the SelectCommand property of
the SqlDataAdapter
=> Nói ng n g n là nó s t th c hi n nh ng câu l nh truy v n cho mình khi mình chắ ọ ẽ ự ự ệ ữ ệ ấ ỉ
đ a vào 1 câu truy v n select => Đ làm gì nh ? T vi t cũng đc màư ấ ể ỉ ự ế
Tuy nhiên gi s cái b ng c a chúng ta có 20 c t và mình ph i insert or update b ng đóả ử ả ủ ộ ả ằ
c t thì cách vi t đó ko h kh thi.ộ ế ề ả
Microsoft đ a ra class SqlCommandBuilder đ gi m b t vi c sai sót khi th c hi nư ể ả ớ ệ ự ệ
8
nh ng câu truy v n đóữ ấ
Cách s d ng:ử ụ
- Đ u tiên c n có 1 SqlDataAdapter v i câu truy v n Select ầ ầ ớ ấ
- Ti p đó b n c n có 1 cái DataSet or DataTable đ có th th c hi n các truy v n khácế ạ ầ ể ể ự ệ ấ
(yêu c u là các control này ph i có d li u, hôm mình đi th c hành c new DataSet vàầ ả ữ ệ ự ứ
cu i cùng nó toàn báo l i, b c quá ko thèm làm n a)ố ỗ ự ữ
- Và đi u quan tr ng n a là cái b ng mình ch n đ truy v n b t bu c ph i có khoáề ọ ữ ả ọ ể ấ ắ ộ ả
chính (mình hay b m c l i này t i bên SQL ko t chèn khoá chính =>mà edit l i b ngị ắ ỗ ạ ự ạ ả
thì g p ặ cái l i nìỗ ) if ko có khoá chính thì m i ng i s g p cái thông báo nàyọ ườ ẽ ặ
Dynamic SQL generation for the UpdateCommand is not supported against a
SelectCommand that does not return any key column information
Ngay dòng th c hi n câu truy v n Update,Insert,Deleteự ệ ấ
Đây là code c a Microsoft nè:ủ
PHP Code:
public static DataSet SelectSqlRows(string connectionString,
string queryString, string tableName)
{
using (SqlConnection connection = new SqlConnection(connectionString
))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection)
;
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
connection.Open();
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, tableName);
//code to modify data in DataSet here
builder.GetUpdateCommand();
//Without the SqlCommandBuilder this line would fail
adapter.Update(dataSet, tableName);
return dataSet;
}
}
Cũng ch a test n a nh ng ch c ch n n u s d ng h CSDL nào mà có h trư ữ ư ắ ắ ế ử ụ ệ ỗ ợ
CommandBuilder đ u có th làm t ng tề ể ươ ự
ách xu t d li u ra file excel trong l p trình C#.ấ ữ ệ ậ
9
Cách xu t d li u ra file excel trong l p trình C#.ấ ữ ệ ậ
Khi vi t m t ch ng trình qu n lý ta th ng ph i in n r t nhi u th . Ví d inế ộ ươ ả ườ ả ấ ấ ề ứ ụ
danh sách l p, b ng đi m….ớ ả ể
M t cách truy n th ng mà t tr c đ n nay ta v n hay dùng đó là dùng Crystalộ ề ố ừ ướ ế ẫ
Report, nh ng th c t ta có th vi t code đ cho xu t ra file Excel, word hayư ự ế ể ế ể ấ
pdf… tùy ý thích.
M t trong nh ng cách đ n gi n và hay đ c dùng nh t là xu t ra file excel. Sauộ ữ ơ ả ượ ấ ấ
đây mình s trình bày cách xu t d li u ra file excel:ẽ ấ ữ ệ
+ Môi tr ng tri n khai là b tool visual Studio 2005, ho c 2008 hay 2010 tùyườ ể ộ ặ
thích.
+ Ngôn ng l p trình là C#.ữ ậ
+ M t đi u ki n n a là máy c a b n ph i cài Microsoft office.ộ ề ệ ữ ủ ạ ả
Công vi c g m các b c sau:ệ ồ ướ
B c 1ướ : Reference đ n đ i t ng sau:ế ố ượ
B n ch n Website/Add Reference (đ i v i d án là website) ho c Project/Addạ ọ ố ớ ự ặ
Reference (đ i v i d án là winform) c a s Add reference xuât hi n. B n ch nố ớ ự ử ổ ệ ạ ọ
tab .NET sau đó ch n ọ Microsoft.Office.Interop.Excel (ch n version 11.0 ho c 12.0)ọ ặ
B c 2ướ :
Và trong file code C# b n khai báo s d ng Namespace này:ạ ử ụ
using COMExcel = Microsoft.Office.Interop.Excel;
“COMExcel” là tên đ i t ng b n t o ra nên b n có th dùng tên khác.ố ượ ạ ạ ạ ể
B c 3ướ : Kh i t o các đ i t ng (dùng trong tr ng h p t o m i m t fileở ạ ố ượ ườ ợ ạ ớ ộ
Excel):
ng d ng Excel bao g m các thành ph n sau:Ứ ụ ồ ầ
- Application (ch ng trình excel)ươ
- Workbook (file xls làm vi c, có nhi u workbook trong app)ệ ề
- Worksheet (có nhi u worksheet trong workbook)ề
Nh v y ta ph i kh i t o c 3 đ i t ng trên nh sau:ư ậ ả ở ạ ả ố ượ ư
COMExcel.Application exApp = new
COMExcel.Application();
COMExcel.Workbook exBook =
exApp.Workbooks.Add(COMExcel.XlWBATemplate.xlWBATWorksh
eet);
COMExcel.Worksheet exSheet =
(COMExcel.Worksheet)exBook.Worksheets[1];
B c 4ướ : Sau đó đ làm vi c v i ng d ng b n t o ra ta dùng l nh sau:ể ệ ớ ứ ụ ạ ạ ệ
exBook.Activate();
exSheet.Name = "BangDiem"; // Tên c a sheet b n làmủ ạ
vi c.ệ
B c 5ướ : Ghi d li u vào sheet b n làm vi c:ữ ệ ạ ệ
COMExcel.Range tenTruong =
10
(COMExcel.Range)exSheet.Cells[1, 1]; //Ghi d li u lênữ ệ
hàng 1, c t 1 trong vùng làm vi c c a Excel th c ch tộ ệ ủ ự ấ
là ô A1;
tenTruong.Font.Size = 18; // C ch 18.ỡ ữ
tenTruong.Font.Bold = true; //Cho in đ mậ
tenTruong.Value2 = "Giá tr c n ghi vào”;ị ầ
B c 6ướ : Hi n th ch ng trình Excel:ể ị ươ
exApp.Visible = true;
Trên đây là các b c c b n đ b n t o ra m t file Excel, ghi d li u vào fileướ ơ ả ể ạ ạ ộ ữ ệ
Excel. T nh ng đi u này b n có th dùng nó đ ghi d li u mà b n có trongừ ữ ề ạ ể ể ữ ệ ạ
CSDL ra file Excel b ng cách:ằ
+ T o DataTable ch a d li u b n mu n Xu t ra Excel.ạ ứ ữ ệ ạ ố ấ
+ R i th c hi n các b c nh trên đ ghi d li u ra Excel: (Khi ghi ta ghi t ngồ ự ệ ướ ư ể ữ ệ ừ
record m t ra hàng và c t Excel t ng ng).ộ ộ ươ ứ
Trên đây mình đã trình bày xong ph n xu t d li u ra Excel. Khi nào có th iầ ấ ữ ệ ờ
gian mình s trình bày cách dùng C# đ k t n i đ n d li u là file Excel đ đ cẽ ể ế ố ế ữ ệ ể ọ
d li u trong file Excel đó.ữ ệ
Đây là m t class trong quá trình làm vi c nghiên c u đ c. Nó cho phép xu t t tộ ệ ứ ượ ấ ố
ti ng vi t trong PHP. ế ệ
1. File load d li uữ ệ
PHP Code:
<?php
// load library
require 'php-excel.class.php';
// create a simple 2-dimensional array
$data = array(
1 => array ('Name', 'Surname'),
array('Schwarz', 'Oliver'),
array('Test', 'Peter')
);
// generate file (constructor parameters are optional)
$xls = new Excel_XML('UTF-8', false, 'Workflow Management');
$xls->addArray($data);
$xls->generateXML('Output_Report_WFM');
?>
2.File th vi n - đ t tên cho file th vi n là : php-excel.class.phpư ệ ặ ư ệ
PHP Code:
<?php
/**
* Simple excel generating from PHP5
*
* @package Utilities
* @license
11
* @author Oliver Schwarz
* @version 1.0
*/
/**
* Generating excel documents on-the-fly from PHP5
*
* Uses the excel XML-specification to generate a native
* XML document, readable/processable by excel.
*
* @package Utilities
* @subpackage Excel
* @author Oliver Schwarz
* @version 1.1
*
* @todo Issue #4: Internet Explorer 7 does not work well with the given
header
* @todo Add option to give out first line as header (bold text)
* @todo Add option to give out last line as footer (bold text)
* @todo Add option to write to file
*/
class Excel_XML
{
/**
* Header (of document)
* @var string
*/
private $header = "\n<W
orkbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:x=
\"urn:schemas-microsoft-com:office:excel\" xmlns:ss=\"urn:schemas-
microsoft-com:office:spreadsheet\" xmlns:html=\"
C-html40\">";
/**
* Footer (of document)
* @var string
*/
private $footer = "";
/**
* Lines to output in the excel document
* @var array
*/
private $lines = array();
/**
* Used encoding
* @var string
*/
private $sEncoding;
/**
* Convert variable types
* @var boolean
*/
private $bConvertTypes;
12
/**
* Worksheet title
* @var string
*/
private $sWorksheetTitle;
/**
* Constructor
*
* The constructor allows the setting of some additional
* parameters so that the library may be configured to
* one's needs.
*
* On converting types:
* When set to true, the library tries to identify the type of
* the variable value and set the field specification for Excel
* accordingly. Be careful with article numbers or postcodes
* starting with a '0' (zero)!
*
* @param string $sEncoding Encoding to be used (defaults to UT
F-8)
* @param boolean $bConvertTypes Convert variables to field spe
cification
* @param string $sWorksheetTitle Title for the worksheet
*/
public function __construct($sEncoding = 'UTF-8', $bConvertTypes
= false, $sWorksheetTitle = 'Table1')
{
$this->bConvertTypes = $bConvertTypes;
$this->setEncoding($sEncoding);
$this->setWorksheetTitle($sWorksheetTitle);
}
/**
* Set encoding
* @param string Encoding type to set
*/
public function setEncoding($sEncoding)
{
$this->sEncoding = $sEncoding;
}
/**
* Set worksheet title
*
* Strips out not allowed characters and trims the
* title to a maximum length of 31.
*
* @param string $title Title for worksheet
*/
public function setWorksheetTitle ($title)
{
$title = preg_replace ("/[\\\|:|\/|\?|\*|\[|\]]/", "",
$title);
$title = substr ($title, 0, 31);
$this->sWorksheetTitle = $title;
13
}
/**
* Add row
*
* Adds a single row to the document. If set to true, self::bCo
nvertTypes
* checks the type of variable and returns the specific field s
ettings
* for the cell.
*
* @param array $array One-dimensional array with row content
*/
private function addRow ($array)
{
$cells = "";
foreach ($array as $k => $v):
$type = 'String';
if ($this->bConvertTypes === true && is_numeri
c($v)):
$type = 'Number';
endif;
$v = htmlentities($v, ENT_COMPAT, $this-
>sEncoding);
$cells .= "" . $v
. "\n";
endforeach;
$this->lines[] = "\n" . $cells . "\n";
}
/**
* Add an array to the document
* @param array 2-dimensional array
*/
public function addArray ($array)
{
foreach ($array as $k => $v)
$this->addRow ($v);
}
/**
* Generate the excel file
* @param string $filename Name of excel file to generate (...x
ls)
*/
public function generateXML ($filename = 'excel-export')
{
// correct/validate filename
$filename = preg_replace('/[^aA-zZ0-9\_\-]/', '', $file
name);
// deliver header (as recommended in php manual)
header("Content-Type: application/vnd.ms-excel; charset
=" . $this->sEncoding);
header("Content-Disposition: inline; filename=\"" . $fi
lename . ".xls\"");
14
// print out document to the browser
// need to use stripslashes for the damn ">"
echo stripslashes (sprintf($this->header, $this-
>sEncoding));
echo "\nsWorksheetTitle
. "\">\n\n";
foreach ($this->lines as $line)
echo $line;
echo "\n\n";
echo $this->footer;
}
}
?>
15
Các file đính kèm theo tài liệu này:
- Trong 1 class ta cần phân biệt rõ và làm quen các khái niệm sau- trường(field), biến(property) và p_.pdf