20 thg 8, 2009
Linh Tinh 2
Array (mảng) có lẽ là 1 gia vị quá đỗi quen thuộc đối với chúng
ta, từ 1 anh sinh viên năm nhất tập tễnh bước vào thế giới lập
trình với ngôn ngữ Pascal, cho đến những bạn đang theo đuổi
nghiệp coding như chúng ta. Ứng dụng của mảng trong các bài
tập ở các ngôn ngữ C/C++ là rất lớn. Nhưng…có 1 điều khó
khăn mà chúng ta gặp phải khi sử dụng chúng là sự hạn chế
về kích thước cố định của mảng. Làm sao để giải quyết
vấn đề này nhỉ? Có lẽ các bạn cũng đã có cách giải quyết cho
riêng mình, riêng tôi, với việc C# cho ra đời “baby” ArrayList,
tôi có vỗ ngực nói với bạn bè “he he,mình đã giải quyết
được vấn đề kích thước của mảng rồi”.ArrayList ra đời đã
giải quyết được khuyết điểm của mảng trong các ngôn ngữ
đi trước nó. Nào, bây giờ chúng ta cùng nhau tìm hiểu “em bé”
ArrayList có mặt mũi vuông tròn như thế nào nhé. LET’S GO!
Trong C#, muốn thao tác với ArrayList, không có cách nào
khác hơn là bạn phải dùng đến class ArrayList được xây
dựng sẵn. Lớp ArrayList này cung cấp cho bạn những
phương thức và thuộc tính cơ bản sau:
PUBLIC PROPERTIES – CÔNG DỤNG
Capacity : trả về hoặc cho thiết đặt số phần tử mà
ArrayList có thể chứa.
Count : cho biết số phần tử hiện có trong ArrayList
IsFixedSize: trả về một trị bool cho biết liệu Array
List mang kích thước cố định hay không
IsReadOnly: trả về 1 trị bool cho biết liệu xem Array
List thuộc loại ReadOnly hay không
Item: trả về hoặc thiết đặt phần tử mảng về chỉ mục
được chỉ định. Trên C#, thuộc tính này là indexer
(bộ rảo chỉ mục) đối với class ArrayList
PUBLIC METHODS – CÔNG DỤNG
Add: thêm 1 đối tượng vào cuối ArrayList
AddRange: thêm các phần tử của một Icolletion vào
cuối ArrayList
BinarySearch: sử dụng giải thuật binary search
để xác định vị trí của một phần tử hoặc một phần trên
ArrayList đã được sắp xếp
Clear: xóa sạch ArrayList
Clone: tạo 1 bản sao của ArrayList
Contains: xác định 1 phần tử nào đó có nằm trong
ArrayList hay không
CopyTo: Sao chép ArrayList hoặc 1 phần tử nào đó
sang mảng 1 chiều
IndexOf: trả về zero-based index của sự xuất hiện
đầu tiên của 1 trị trên ArrayList hoặc trên 1 phần mảng
Insert: chèn thêm 1 phần tử vào ArrayList tại chỉ mục
được chỉ định
InsertRange: chèn các phần tử của 1 collection vào
ArrayList tại chỉ mục được chỉ định
LastIndexOf: trả về zero-based index của sự xuất
hiện cuối cùng của 1 trị trên ArrayList hoặc trên 1 phần mảng
Remove: gỡ bỏ sự xuất hiện đầu tiên của một specific
object ra khỏi ArrayList
RemoveAt: gỡ bỏ những phần tử tại chỉ mục được chỉ
định của ArrayList
RemoveRange: gỡ bỏ 1 khoảng phần tử từ ArrayList
Reverse: đảo ngược thứ tự của các phần tử trên ArrayList.
SetRange: sao chép các phần tử của một collection
chồng lên 1 phần phần tử trên ArrayList
Sort: sắp xếp các phần tử trên ArrayList hoặc trên
1 phần mảng
ToArray: sao chép các phần tử của ArrayList về 1 bản dãy
TrimToSize: thiết đặt khả năng về số phần tử hiện
hành trên ArrayList
Lưu ý: khi bạn tạo 1 ArrayList, bạn không thể xác định
sẽ có bao nhiêu đối tượng trong mảng. Bạn thêm phần
tử vào ArrayList bằng cách dùng hàm Add() và ô liệt
kê sẽ tự mình lo việc “giữ sổ sách” nội bộ đúng tình trạng.
Bạn cũng nên lưu ý 1 điều là sức chứa ban đầu mặc định
của ArrayList là 16, do đó khi bạn thêm phần tử thứ 17
thì kích thước mặc định này sẽ tăng gấp đôi lên thành 32.
Sau đây là 1 thí dụ đơn giản về ArrayList được lấy từ MSDN:
| using System; using System.Collections; public class SamplesArrayList { public static void Main() { // tạo 1 thể hiện của ArrayList ArrayList myAL = new ArrayList(); myAL.Add("Hello"); myAL.Add("World"); myAL.Add("!"); // Hiển thị thuộc tính và giá trị trong ArrayList Console.WriteLine( "myAL" ); Console.WriteLine( " Count: {0}", myAL.Count ); Console.WriteLine( " Capacity: {0}", myAL.Capacity ); Console.Write( " Values:" ); PrintValues( myAL ); } public static void PrintValues( IEnumerable myList ) { foreach ( Object obj in myList ) Console.Write( " {0}", obj ); Console.WriteLine(); } } /* This code produces the following output. myAL Count: 3 Capacity: 16 Values: Hello World ! */ |
Linh Tinh
| Ứng dụng tin tức đơn giản với ASP.NET | |
public void CreateNewCategory() public static void CreateCategory(Category category) public void CreateCategory(Category category) public void CreateCategory(Category category) Stored Procedure spCategoriesCreate đơn giản được viết như sau: CREATE PROCEDURE dbo.spCategoriesCreate Hiện thực lớp Business Logic public static void CreateCategory(Category category)
|
Winform C# Part 5
Giả sử ta có danh sách các Field (trường dữ liệu)
Trên Form, tại mỗi control. Ta muốn mỗi lần cho hiện lên thông tin của 1 mẫu tin trong Data Source
Hướng giải quyết:
Từ trước nay thì ta vẫn làm theo cách cổ điển. Là sẽ dùng các biến để lưu dữ liệu tại mẫu tin (record) hiện tại cho đối tượng.
Và mỗi lần di chuyển đến các record khác thì ta lại set dữ liệu vào các control.(…)
Vấn đề phát sinh:
Khi lập trình, thì khi insert hay update hoặc truyền dữ liệu qua lại giữa các class thì cách làm từ trước nay là gọi 1 câu truy vấn và truyền một “lô” các parameter hay là xử lý chuỗi truy vấn rất phức tạp và rắc rối.
Giải pháp
Nếu có khả năng cao hơn thì dùng DataSet. Nhưng trước insert hay update dữ liệu thì phải lấy dữ liệu từ các control đổ vào dataset.
Để giải quyết cho những vướn mắc trên thì trong C# đã đề xuất một hướng đi rất hay và rất tiện dụng, nó đã giải quyết cho lập trình viên rất nhiều thao tác cũng như những xử lý phức tạp kéo theo khác.
Cách giải quyết đó là dùng “kỹ thuật Binding” để kết nối dữ liệu từ data source vào các control trên form. Nhằm hạn chế các thao tác xử lý nêu trên.
Trong C# nó được định nghĩa là Data Binding
Giới Thiệu về Data Binding
- Data Binding là 1 giải pháp cho người phát triển phần mềm, dùng để giải quyết các vấn đề liên quan đến dữ liệu và bề mặt giao diện (GUI) của ứng dụng.
-Data Binding là cách sắp đặt (gắn kết) các thành phần của một data source vào một thành phần GUI và tự động làm việc với dữ liệu. Ta có thể bind một cột (column) vào một TextBox qua thuộc tính Text hoặc có thể bind cả một table vào DataGrid như DataGridView.
Có 2 cách bind dữ liệu vào Windows Forms:
Simple Data Binding – gắn kết dữ liệu đơn giản.
Complex Data Binding – gắn kết dữ liệu phức tạp.
Simple Data Binding là cách gắn kết một - một giữa một thuộc tính của control và một thành phần của data source, và sử dụng control này để hiển thị duy nhất một giá trị một lần.
Ví dụ: gắn kết dữ liệu từ một cột của một table vào thuộc tính Text của một TextBox nào đó trên Form.
Complex Data Binding là gắn kết một control với một hoặc nhiều thành phần data của data source, có thể hiển thị nhiều hơn một giá trị một lần.
Ví dụ: gắn kết dữ liệu từ một table với một ComboBox hay gắn kết dữ liệu từ một table với một dataGridView
Ý nghĩa to lớn của DataBinding
Với Data Binding chúng ta sẽ chỉ set dữ liệu một lần vào các control, và khi dữ liệu trên các control thay đổi thì tại các control khác dữ liệu sẽ được tự động update cho đúng với mẫu tin (record) trong data source.
Data Binding cũng sẽ tự động update những dữ liệu mà chúng ta đã thay đổi tại các control trong quá trình thao tác trên ứng dụng.
Ngoài ra Data Binding còn giúp chúng ta quản lý lỗi dữ liệu tốt hơn. Đồng thời nó cũng tự động định dạng dữ liệu theo đúng dịnh dạng chúng ta sử dụng trên các control.
Chính vì thế Data Binding ra đời nhằm gói gọn tất cả các thao tác xử lý, nó giúp chúng ta trình bày dữ liệu một cách nhanh chóng, nó hạn chế việc viết code.
Mình xin hướng dẫn việc kết nối DataBinding vói textbook tuần nay rãnh mình sẽ viết với combox và listbook
Các bước chuân bị:
1.Chuẩn bị một table,có thể dùng MS Asscess cho tiện,ví dụ này mình dùng asscess
2.Sử dụng Kỹ thuật Binding
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//
//khoi tao table cho dtbSinhVien
//
private DataTable DtbSinhvien = new DataTable();
private CurrencyManager cmdSinhVien;
OleDbDataAdapter dadSinhvien;
//
//Form1_Load
//
private void Form1_Load(object sender, EventArgs e)
{
try
{ //khoi tao connect
string connString = "Provider = Microsoft.Jet.OleDb.4.0; Data Source=data.mdb";
OleDbConnection conn = new OleDbConnection(connString);
//lay tong tin tu table
string selectCmd = "SELECT * FROM SinhVien";
dadSinhvien = new OleDbDataAdapter(selectCmd, conn);
//fill cho DtbSinhVien
dadSinhvien.Fill(DtbSinhvien);
BuildDataBinding();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
}
//
//BuildDataBinding();
//
private void BuildDataBinding()
{
TB_MSSV.DataBindings.Add("Text", DtbSinhvien, "MSSV");
TB_HoTen.DataBindings.Add("Text", DtbSinhvien, "HoTen");
TB_NgaySinh.DataBindings.Add("Text", DtbSinhvien, "NgaySinh");
TB_Khoa.DataBindings.Add("Text", DtbSinhvien, "Khoa");
TB_NienKhoa.DataBindings.Add("Text", DtbSinhvien, "NienKhoa");
TB_DiemTrungBinh.DataBindings.Add("Text", DtbSinhvien, "DiemTrungBinh");
TB_XepLoai.DataBindings.Add("Text", DtbSinhvien, "XepLoai");
//
//su dung BindingContext,muc dich la de giai quyet van de nhieu CurrencyManager
//
cmdSinhVien = (CurrencyManager)this.BindingContext[DtbSinhvien];
//
//tao thuoc tinh cho PositionChanged bien cmdSinhVien
//
cmdSinhVien.PositionChanged += new EventHandler(cmdSinhVien_PositionChanged);
}
//
//ham cmdSinhVien_PositionChanged
//
private void cmdSinhVien_PositionChanged(object sender, EventArgs e)
{
Label_Thongtin.Text = "Sinh Vien thu " + (cmdSinhVien.Position + 1).ToString() + " trong tong so " + cmdSinhVien.Count.ToString() + " Sinh Vien";
}
//
//code cho cac button frist,next,last,pre
//
private void BT_Frist_Click(object sender, EventArgs e)
{
cmdSinhVien.Position=0;
}
private void BT_Last_Click(object sender, EventArgs e)
{
cmdSinhVien.Position = cmdSinhVien.Count - 1;
}
private void BT_Previous_Click(object sender, EventArgs e)
{
cmdSinhVien.Position--;
}
private void BT_Next_Click(object sender, EventArgs e)
{
cmdSinhVien.Position++;
}
}
}
Kết quả: Bạn có thể xem thông tin các sinh viên qua CSDL mình vừa tạo ra
Một số vấn đề liên quan:
CurrencyManager:Sau khi các control đã được gắn kết với dữ liệu, ta phải giữ chúng hoạt động nhịp nhàng với nhau khi người dùng thao tác qua lại trên các mẫu tin.
Trong các dữ liệu nguồn .NET, kể các DataSet, cũng không có khái niệm về mẫu tin hiện hành. Bởi vậy nên thay vào đó, đối tượng CurrencyManager sẽ hỗ trợ chúng ta làm việc này một cách dễ dàng.
Lớp CurrencyManager chủ trì việc quản lý hoạt động của tất cả các đối tượng Binding được gắn liền với một dữ liệu nguồn đặc biệt nào đó.
Đối tượng CurrencyManager có một thuộc tính quan trọng đó là Position. Thuộc tính Position này nó sẽ cho ta biết vị trí (index) của mẫu tin hiện thời đang được hiển thị trên các control.
Do đó chúng ta có thể đi đến mẫu tin kế tiếp hoặc lùi về mẫu tin trước một cách khá dễ dàng và thuận tiện.
BindingContext:
Một đối tượng CurrencyManager sẽ hiện hữu đối với mỗi Data Source được dùng cho Simple Data Binding. Như vậy, có thể có nhiều hơn một CurrencyManager cho bất cứ control nào đó.
Hoặc vì control được gắn liền với nhiều hơn một Data Source, hoặc vì control là một thùng chứa đối với các control khác dùng chung nhiều Data Source.
Lúc này BindingContext vào cuộc để đóng gói dưới dạng một tập hợp, một hoặc nhiều đối tượng CurrencyManager.
Muốn nhận một đối tượng CurrencyManager đặc biệt nào đó, đơn giản ta trao dữ liệu nguồn cho thuộc tính BindingContext. Bạn có thể đơn giản nhận được dễ dàng cùng đối tượng CurrencyManager như sau:
Vài bữa mình sẽ trình bày thêm vấn đề update,insert,delete CSDL!Thân chào
Microsoft Visual Studio 2005
MICROSOFT VISUAL STUDIO 2005Tôi sẽ cùng các bạn tìm hiểu sâu hơn về công cụ lập trình nổi tiếng này!
Trước tiên chúng ta tìm hiểu về Toolbox. Toolbox bao gồm : 1_Standard, 2_Data, 3_Validation, 4_Navigation, 5_Login, 6_WebPasrts, 7_HTML, 8_Crystal Reports, 9_General
- 2_Data
1. GridView ?
2. DataList ?
3. DataListView ?
4. FormView ?
5. Repeater ?
6. SqlDataSource ?
7. AccessDataSource ?
8. ObjectDataSource ?
9. XmlDataSource ?
10. SiteMapDataSource ?
11. ReportViewer ?





























































