Sau đây mình ví dụ 1 class HocSinh public class HocSinh { string hoten;//khai báo thế này thì hoten là 1 truongfield dạng private // giống khai báo private string hoten; public string
Trang 1Trong 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 trường
Trang 2đượ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
Trang 3CenterScreen form được căn giữa màn hình Ví dụ: StartPosition =
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;
Trang 4this.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 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ì
Trang 5sẽ 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
• 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 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
Trang 6phú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ố:
Trang 7Thuộ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:
Trang 8giatricubo 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 những
Trang 9câ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#
Trang 10Cá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 =
(COMExcel.Range)exSheet.Cells[1, 1]; //Ghi dữ liệu lên
Trang 11hà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 http://www.opensource.org/licenses/mit-license.php
* @author Oliver Schwarz <oliver.schwarz@gmail.com>