Cập nhật một dòng dữ liệu

Một phần của tài liệu Phát triển ứng dụng cơ sở dữ liệu với c và net framework (Trang 107 - 109)

Chương 8 Ứng dụng Windows với WindowsForm

9.9.2. Cập nhật một dòng dữ liệu

Khi người dùng nhấn Button Update (cập nhật), ta sẽ lấy chỉ mục được chọn trên ListBox, và lấy ra dòng dữ liệu DataRow trong bảng ứng với chỉ mục trên. Sau

đó cập nhật DataSet với dòng dữ liệu mới này nếu sau khi kiểm tra thấy chúng không có lỗi nào cả. Chi tiết về quá trình thực hiện cập nhật:

Đầu tiên ta sẽ lấy về dòng dữ liệu người dùng muốn thay đổi từ đối tượng dataTable mà ta đã khai báo làm biến thành viên ngay từđầu:

DataRow targetRow = dataTable.Rows[lbCustomers.SelectedIndex];

Hiển thị chuỗi thông báo cập nhật dòng dữ liệu đó cho người dùng biết. Để

làm điều này ta sẽ gọi phương thức tình DoEvents() của đối tượng Application, hàm này sẽ giúp sơn mới lại màn hình với thông điệp hay các thay đổi khác.

lblMessage.Text = "Updating " + targetRow["CompanyName"]; Application.DoEvents();

chế độ hiệu chỉnh ( Edit ) và EndEdit() để kết thúc chếđộ hiệu chỉnh dòng. targetRow.BeginEdit();

targetRow["CompanyName"] = txtCustomerName.Text; targetRow.EndEdit();

Lấy về các thay đổi trên đối tượng DataSet để kiểm tra xem các thay đổi có xảy ra bất kỳ lỗi nào không. Ởđây ta sẽ dùng một biến cờ có kiểu true/false để xác

định là có lỗi là true, không có lỗi là false.Kiểm tra lỗi bằng cách dùng hai vòng lặp tuần tự trên bảng và dòng của DataSet mới lấy về ở trên, ta dùng thuộc tính HasErrors để kiểm tra lỗi trên bảng, phương thức GetErrors() để lấy về các dòng có lỗi trong bảng.

DataSet DataSetChanged;

DataSetChanged = DataSet.GetChanges(DataRowState.Modified); bool okayFlag = true;

if (DataSetChanged.HasErrors) {

okayFlag = false;

string msg = "Error in row with customer ID ";

foreach (DataTable theTable in DataSetChanged.Tables) {

if (theTable.HasErrors) {

DataRow[] errorRows = theTable.GetErrors( ); foreach (DataRow theRow in errorRows)

msg = msg + theRow["CustomerID"]; }

}

lblMessage.Text = msg; }

Nếu biến cờ okagFlag là true,thì ta sẽ trộn DataSet ban đầu với DataSet thay

đổi thành một, sau đó cập nhật DataSet sau khi trộn này vào cơ sở dữ liệu. if (okayFlag)

{

DataSet.Merge(DataSetChanged);

DataAdapter.Update(DataSet,"Customers");

Tiếp theo hiển thị câu lệnh truy vấn cho người dùng biết, và cập nhật những thay đổi cho DataSet đầu tiên, rồi hiển thị dữ liệu mới lên đối tượng ListBox.

lblMessage.Text = DataAdapter.UpdateCommand.CommandText; Application.DoEvents( );

DataSet.AcceptChanges( ); PopulateLB( );

Nếu cờ okayFlag là false, có nghĩa là có lỗi trong quá trình hiệu chỉnh dữ liệu, ta sẽ từ chối các thay đổi trên DataSet.

else

DataSet.RejectChanges( );

Một phần của tài liệu Phát triển ứng dụng cơ sở dữ liệu với c và net framework (Trang 107 - 109)

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

(192 trang)