Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 17 kết quả

Đề tài: Cập nhập vào dataset và datasource

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    117

    Mặc định 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. #2
    Ngày gia nhập
    11 2006
    Bài viết
    633

    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. #3
    Ngày gia nhập
    11 2007
    Bài viết
    294

    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. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Trích dẫn Nguyên bản được gửi bởi webshot Xem bài viết
    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 +_+
    Tại sao bạn lại không dùng datagridview nhi ???
    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

    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ả.
    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ác
    UpdateCOmmand,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);
    Có thể hỗ trợ thêm chế độ hủy mọi sửa đổi bằng 2 lệnh
    Code:
     AnyDataTable.RejectChanges() ;
     DataTableToListV () ;    // gọi lại thủ tục reload listview
    Nếu chăm chút thêm chút nữa thì có thể làm thêm chức năng đổi màu những cell đã bị sửa đổi để
    user có thể quan sát toàn diện .
    Hope this help
    Đã được chỉnh sửa lần cuối bởi Haipt : 17-01-2008 lúc 03:36 PM.

  5. #5
    Ngày gia nhập
    11 2006
    Bài viết
    633

    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. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Mặc định 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);
    Nhiều bạn mới dùng ado.net sẽ thấy hơi khó hiểu, tôi diễn giải lại thế này nhé.
    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
    Đã được chỉnh sửa lần cuối bởi Haipt : 18-01-2008 lúc 02:26 PM.

  7. #7
    Ngày gia nhập
    11 2006
    Bài viết
    633

    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. #8
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Ô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. #9
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Hơi dư tí tẹo . Nhiêu đây là đủ rồi

    new OleDbCommandBuilder(da);
    da.Update(dt);
    Keep moving forward!

    ... Retired ...

  10. #10
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    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.

Các đề tài tương tự

  1. Trả lời: 0
    Bài viết cuối: 15-04-2013, 11:33 PM
  2. CẬP NHẬT THAY ĐỔI CƠ SỞ DỮ LIỆU VÀO DATASET trong c# ??
    Gửi bởi mrhoabinh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 12-04-2012, 09:18 AM
  3. Làm cách nào cập nhật datagripview ko cần dùng dataset trong linq?
    Gửi bởi thoigian15 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 04-09-2011, 02:51 PM
  4. Tạo resprost kiểu microsoft và dataset không cập nhật cơ sở dữ liệu
    Gửi bởi trinhminhkhang23 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 28-08-2011, 03:38 PM
  5. cập nhật thay đổi trên datagridview về datasource
    Gửi bởi HungDL trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 16-10-2008, 08:50 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn