|
#1
|
||||
|
||||
Cập nhập vào dataset và datasource
mình đã fill từ datasource vào dataset rồi cho show ra một cái listview ( ko dùng datagrideview) sau đó chỉnh sửa dữ liệu trên listview ( thêm các hàng, xóa ,sửa các giá trị của ô listview). bây h làm sao cập nhập nó lại dataset được nhỉ ( mình đã tạo ra một cái datatable rồi)
và câu hỏi thứ 2 ( quan trọng hơn +_+) đấy là sau khi cập nhập lại được rồi thì làm sao cập nhập lại datasource được mình xem nhiều cách nhưng chưa chạy được vì cái của mình ko phải là mỗi lần người dùng sửa một cai thì nó update luôn, mà mình cho họ chỉnh sửa , thêm , xóa chán chê mê mỏi trên listview. cuối cùng khi bấm thoát thì chương trình mới lưu tất cả lại datasource. +_+ như vậy với các cách mình xem trong diễn đàn ( viết sqlcommand) thì mình chịu vì ở đây người dùng vừa xóa , sửa , cập nhập vậy có cách nào xử lý ko các bạn thank nhìu +_+ |
|
#2
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasource
Ko nên làm thế vì khó kiểm soát chương trình và chi phí cho việc thực hiện quá lớn. Để tôi gợi ý bạn làm nhé:
Đầu tiên khống chế list view để user ko được phép chỉnh sửa, chỉ được phép xem và di chuyển. Khi user chọn chức năng sửa thì chỉ dòng nào được xác định mới được phép bật lên để chỉnh sửa thôi. Sau khi sửa xong bấm xác nhận và bạn sẽ đưa các đối tượng của dòng đó vào 1 lớp gồm các biến như các field trong table, sau đó dùng câu lệnh sql để update lại dữ liệu. Sau đó lại khống chế list view Khi user chọn chức năng thêm mới thì tạo thêm dòng mới và chỉ dòng đó được phép thêm dữ liệu. Sau khi bấm xác nhận thì tương tự như sửa. Khi user delete thì chỉ delete đúng dòng được chọn thôi. Nếu bạn ko tương tác trực tiếp được trên list view thì nên tạo các textbox để người dùng chỉnh sửa rồi sau đó cập nhật vào table. Nếu bạn vẫn muốn làm theo cách của mình thì tốt nhất là thế này: Dùng vòng lặp for để duyệt hết listview, tại mỗi dòng ta dùng câu lệnh sql để kiểm tra xem id đã tồn tại trong table chưa, nếu rồi thì update, nếu chưa thì insert, chống chỉ định cho việc delete (ko xử lý được trường hợp này). Nhưng thông thường thì ko ai cho phép bạn làm bấy nhầy cái table rồi mới cập nhật vào datasource cả.
__________________
|
|
#3
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasource
Thực ra cái này vẫn làm được!
Với datarow của ADO.NET có cả trạng thái.Khi bạn xóa 1 row trong datatable thì nó sẽ bị chuyển trạng thái thành delete chứ ko bị xóa thật.Khi add mới thì trạng thái sẽ là addnew.... Bạn có thể dựa vào trạng thái đó để cập nhật. Viết sqlcommand cũng dựa vào trạng thái này.Bạn có thể tìm hiểu thêm về sqlcommand.Nó cho phép bạn làm nhiều thao tác chứ ko như bạn nghĩ đâu. @huynguyen:Thông thường thì làm theo cách của bạn rất an toàn.Nhưng trong 1 số trường hợp khi dữ liệu quá đơn giản thì người ta có thể cho cập nhật ngay trên grid or list. |
|
#4
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasourceTrích dẫn:
Dùng ListView cũng hơi mất thời gian 1 chút... bạn làm thế này nhé Giả định bạn đã làm 1 thủ tục load data từ Datatable vào listview ( DataTableToListV chẳng hạn ) Ta nhận thấy rằng ListView thực chất là 1 khung nhìn của datatable ,các chỉ số dòng cột hoàn toàn tương đương do vậy bạn phải chặn 1 số sự kiện soạn thảo của người dùng rùi quy đổi ra ví trí dòng cột tương ứng của datatable, hễ dòng 1 list view thay đổi thì dòng 1 datatable cũng được cập nhật tương ứng ( có lẽ độ lệch dòng là 1) , hễ user xóa 1 dòng trên list view thì ngoài việc bạn remove 1 dòng trên list thì bạn cũng đánh dấu xóa 1 dòng trên datatable Như vậy user thoái mái chỉnh xửa ,xóa.. Khi nhấn cập nhật bạn chỉ việc gọi anyDataadapter.update datatable Trích dẫn:
không vấn đề gì, trước .NET với ADO 2.X , cách thức làm việc luôn mặc định là online( tức là ta phải luôn luôn luôn giữ kết nối với server - server side cursor lên ta hay gặp rắc rối khi có quá nhiều người cùng truy xuất DB ), và cập nhật dữ liệu thường là dùng ado chạy tuần tự từng dòng rùi update hay insert vô DB, với .NET thì mọi thứ đã thay đổi, ado.net mặc định sẵn chế độ làm việc là offline - client side cursor, chúng ta chỉ kết nối DB khi cần mà thôi ,datatable hoàn toàn độc lập với datasource, chế độ cập nhật là batch update ( cập nhật theo lô),thường thì ta làm sẵn cácUpdateCOmmand,InsertCommand,DeleteCOmmand rùi gán vô 1 dataadapter rùi khi cập nhật chỉ cần gọi Dataapater.Update(dataTable) là xong, với bảng đơn có thể dùng OledbCommandBuilder để sinh tự động luôn các command trên do vậy thường thì để để cập nhật table ta chỉ cần gọi 2 lệnh Code:
System.Data.OleDb.OleDbCommandBuilder CB = new System.Data.OleDb.OleDbCommandBuilder(AnyOleDBDataAdapter); AnyOleDBDataAdapter.Update(AnyDataTable); Code:
AnyDataTable.RejectChanges() ; DataTableToListV () ; // gọi lại thủ tục reload listview user có thể quan sát toàn diện . Hope this help
__________________
Phạm Hải MS Technical Expert FPT Software Corp. www.FPTSoftwareCareer.com www.chodua.com ----------------------------------------- Join us, Kick off the Big Game! Đã được chỉnh sửa lần cuối bởi Haipt : 17-01-2008 lúc 03:36 PM. |
|
#5
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasource
phamtiensinh có thể nói rõ hơn được chứ?
Tôi làm 1 mạch trên DataGridView rồi sau đó update lại vào Database có được ko và cách thức thế nào. Nếu được thì cho 1 cai solution về vụ này để tôi được sáng tỏ 1 chút. Ngoài ra tôi mới tập tành dùng dotNET nên còn kém, cái DataGridView có thể làm được những gì, bạn chỉ giúp tôi với. Tôi mới chỉ dùng nó để load Database, khóa mồm nó lại, mọi xử lý tôi đẩy sang textbox hết.
__________________
|
|
#6
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasource
Tôi có gửi kèm 1 DEMO nhỏ về ADO.NET với các chức năng căn bản
xóa, thêm, sửa,cập nhật... bạn cứ việc chỉnh sửa,xóa thoái mái nếu thấy sai sót thì nhấn eject , Database chỉ thực sự cập nhật khi bạn nhấn UPDATE Bực thật chức năng file đính kèm của 4 room có vấn đề, không up lên nổi đành upload lên google ,bạn tải ở đây nhé, C# project http://phamhai2k6.googlepages.com/Wi...plication1.rar thủ tục update chỉ có 2 dòng Code:
OleDbCommandBuilder cb = new OleDbCommandBuilder(da); da.Update(dt); Thông thường để cập nhật CSDL ví dụ 1 bảng có 3 column ( ID, NAME ,AGE) bạn thường dựa vào ADO 2.X for tuần tự các row rùi update vô CSDL hay duyệt hết các row nếu row bị xóa gọi TSQL DELETE , nếu thêm mới Gọi Insert, nếu sửa gọi UPDATE với 3 tham số đầu vào ID, NAME ,AGE cho mỗi dòng, với ADO.NET , nó bảo bạn :ngài không việc gì phải tự tay duyệt hết cả chỉ việc đưa cho tôi 4 store proc tương ứng SelectCOmmand --> dùng cho fill DeleteCommand InsertCommand UpdateCommand Tôi sẽ duyệt lần lựot các row để update hộ ngài. Tuy nhiên, trong đa số trường hợp việc viết 4 store proc cho mỗi bảng là 1 công việc buồn tẻ và dễ dàng, nếu phải làm nhiều có lẽ bạn nghĩ rằng giá mà mình huấn luyện 1 con khỉ , dạy nó hễ thấy 1 table thì duyệt hết table đó, list lại các primary key, column name, column type để sinh luôn ra các command cần dùng thì hay biết mấy. Có lẽ Microsoft thấu hiểu được các coder cần gì , lên ADO.NET cũng hỗ trợ ta luôn 1 chú khỉ làm cái việc buồn chán là sinh ra tự động luôn các DeleteCommand , InsertCommand, UpdateCommand để lập trình viên đỡ phải mất thời gian làm,và đó chính là OleDbCommandBuilder . Như vậy, bạn sẽ thấy Vs2k5 có rất nhiều chú khỉ như thế... và đừng có dại gì mà tranh việc của chúng, hãy dành thời gian làm việc khác.Trừ khi bạn thấy chúng ko đáp ứng đc yêu cầu và bạn có thể làm tốt hơn.Tìm hiểu thêm về các wizza sinh mã tự động và typed dataset để biết cách làm 1 ứng dụng master -detais với 8 dòng tự code http://www.caulacbovb.com/forum/view...p?f=33&t=12933
__________________
Phạm Hải MS Technical Expert FPT Software Corp. www.FPTSoftwareCareer.com www.chodua.com ----------------------------------------- Join us, Kick off the Big Game! Đã được chỉnh sửa lần cuối bởi Haipt : 18-01-2008 lúc 02:26 PM. |
|
#7
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasource
Cảm ơn phamtiensinh đã giúp đỡ, trong trường học ông thầy bắt viết T-SQL rồi từ lớp Data Access Layer gọi nó theo mô hình 3-tier >"<
Hóa ra thầy cũng gà.
__________________
|
|
#8
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasource
Ông thầy của bạn ko gà đâu
.Nếu bạn đang học thì nên biết là cụ thể nó làm như thế nào. Ví dụ trong 1 số trường hợp hệ thống cần có performant cao thì bạn lại phải làm tay.Khi đó nếu bạn ko biết cụ thể bên dưới nó chạy thế nào thì chắc chết quá. Còn tất nhiên khi làm với thực tế thì lại là chuyện khác.Nhanh gọn mới tốt. @phamtiensinh: Bác ở Hải Phòng ah?
__________________
Is the moon rising... |
|
#9
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasource
Hơi dư tí tẹo
. Nhiêu đây là đủ rồi ![]() Trích dẫn:
__________________
Keep moving forward!
... Retired ... |
|
#10
|
||||
|
||||
Re: hỏi về cập nhập vào dataset và datasource
Hay quá , ko ngờ C# có style gọn vậy... thanks nhc1987 nhé ! Đang hơi chán C# ở cú pháp này .
@darkan: Mình ở Hải phòng ,thậm chí là rất gần đường Văn Cao.
__________________
Phạm Hải MS Technical Expert FPT Software Corp. www.FPTSoftwareCareer.com www.chodua.com ----------------------------------------- Join us, Kick off the Big Game! |
![]() |
|
| Bookmarks |
| Các công cụ đề tài | |
| Các chế độ hiển thị | |
|
|
Các đề tài tương tự
|
||||
| Đề tài | Người bắt đầu đề tài | Diễn đàn | Các trả lời | Bài viết cuối |
| Học lập trình C Online | Tự học C qua Cộng đồng C Việt | Kevin Hoang | Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x | 8 | 30-12-2009 12:20 AM |
| Làm việc với DataSet và DataAdapter | Xcross87 | Thủ thuật Tutorials về Database | 10 | 04-09-2009 02:11 PM |
| [Thủ thuật]Tăng tốc cho mạng và truy cập Internet | neverland87 | Các Hỏi/Đáp khác | 3 | 04-12-2008 11:44 AM |
| [Tham khảo]Kiến thức cơ bản để thiết lập một mạng không dây gia đình | neverland87 | Các Hỏi/Đáp khác | 2 | 26-12-2007 12:40 PM |