Bài 11-Sửa dữ liệu MongoDB trong C#-WPF


bài 10, chúng ta đã biết cách thêm một dữ liệu vào MongoDB như thế nào, cũng như biết được thuật ngữ CRUD. Bài này Tui sẽ hướng dẫn các bạn cách sửa dữ liệu, cũng dùng project và dữ liệu trong bài 10.

Mục tiêu bài này Ta phải làm được như sau:

– mô tả sơ sơ nha: Double click vào dòng listview item hoặc click vào nút Sửa sẽ hiển thị Cửa sổ sửa Sản phẩm cùng với các dữ liệu của dòng được chọn. Lưu ý mọi thứ dùng Binding nha.

Đây là coding để cập nhật dữ liệu vào MongoDB:


MongoClient client = new MongoClient("mongodb://localhost:27017");
IMongoDatabase database = client.GetDatabase("QuanLySanPham");
IMongoCollection collection = database.GetCollection("Product");
FilterDefinition filter =Builders.Filter.Eq("Ma","P1");
UpdateDefinition update =Builders.Update
.Set("Ten", "Mắm tôm")
.Set("DonGia", 113);

collection.UpdateOne(filter, update);

Đoạn Coding trên giúp Ta cập nhật Product có mã P1. Cụ thể: Nó sẽ tìm Product có mã P1, khi tìm thấy, nó sẽ thay đổi Tên của Product này thành “Mắm tôm”giá của Product này thành 113

Các bạn có thể bắt chước và suy luận ra để làm cho các trường hợp khác.

Chi tiết chức năng này như sau:

Trước tiên ta phải tạo một giao diện Sửa Product mà sử dụng Binding dữ liệu, ta new 1 giao diện tên “SuaSanPham.xaml”giống như màn hình ThemSanPham.xaml:


Trong màn hình Sửa ở trên, thấy tui để Binding không? có mã, tên, đơn giá đó. Nó sẽ được gán DataContext khi gọi màn hình này.

Ta xem Coding của SuaSanPham.xaml.cs:


using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace CRUD_MongoCSharp
{
///

/// Interaction logic for SuaSanPham.xaml
/// 

public partial class SuaSanPham : Window
{

public SuaSanPham()
{
InitializeComponent();
}

private void btnLuu_Click(object sender, RoutedEventArgs e)
{
try
{
//lấy Context là đối tượng Product được gán trong màn hình MainWindow
Product p = DataContext as Product;

MongoClient client = new MongoClient("mongodb://localhost:27017");
IMongoDatabase database = client.GetDatabase("QuanLySanPham");
IMongoCollection collection = database.GetCollection("Product");
FilterDefinition filter =Builders.Filter.Eq("Ma", p.Ma);
UpdateDefinition update =Builders.Update
.Set("Ten", p.Ten)
.Set("DonGia", p.DonGia);

collection.UpdateOne(filter, update);
MessageBox.Show("Update thành công");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void btnHuy_Click(object sender, RoutedEventArgs e)
{
Close();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{

}
}
}

Đoạn coding ở trên giúp chúng ta lấy dữ liệu của Product được thay đổi trên giao diện, lưu xuống cơ sở dữ liệu. Chú ý đang Binding nên nó tự động Đồng bộ giữa Giao diện và model nha (thay đổi trên giao diện, nó tự động hiểu đối tượng thay đổi, chỗ nào có tham chiếu nó chạy theo luôn. Do đó  ở màn hình sửa này nè, bạn mà đổi dữ liệu trên giao diện thì quan sát màn hình chính nó tự chạy theo do nó đang cùng tham chiếu một ô nhớ).

Tiếp theo ta xem coding mở màn hình sửa nhé

  • Vì Ta có 2 trường hợp mở màn hình sửa: Double click  vào List View và click vào nút Sửa. Nên bạn tự tìm chỗ sự kiện gán cho nó nha (trong cửa sổ Property thấy mục Event chọn Mouse Double click cho ListView), còn Button thì cứ double click trực tiếp vào nó là OK:

Coding xử lý mở màn hình sửa:


private void MoManHinhSua()
{
if (lvProduct.SelectedIndex == -1)
return;
SuaSanPham suaWindow = new SuaSanPham();
Product p = lvProduct.SelectedItem as Product;
suaWindow.DataContext = p;
suaWindow.ShowDialog();
}
private void btnSua_Click(object sender, RoutedEventArgs e)
{
MoManHinhSua();
}
private void lvProduct_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MoManHinhSua();
}

Chạy chương trình lên ta có được kết quả như mong muốn.

Các bạn có thể tải source code đầy đủ ở đây: Source code sửa Sản phẩm

Bài học Sau Tui sẽ hướng dẫn các bạn các kỹ thuật tương tác dữ liệu (xóa), các bạn chú ý theo dõi.

Các khóa học online khác, bạn có thể tham khảo tại đây: http://communityuni.com/

Chúc các bạn thành công!

One response

  1. […] vậy CRUD ta đã làm được C, R, U , bài này sẽ kết thúc CRUD với D(Delete), bài sau ta sẽ dùng Android Kotlin để […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: