30/09/2018, 16:51

[C#]Sự khác nhau và công dụng của DataGridView và DataTable là gi?

Em mới học về C#, khi làm bài tập e có thắm mắc là tại sao có những bài không lưu trực tiếp lên DataGridView luôn mà phải lưu trên DataTable rồi sau đó mới liên kết lại với nhau?
Và điểm khác nhau giữa 2 cái? Có cần thiết phải dùng DataTable lưu dữ liệu sau đó liên kết với DataGridView để xuất dữ liệu không ạ?
@tuancoi2506 a giúp e phần này đc k?

Phạm Hoàng Tuấn viết 19:03 ngày 30/09/2018

2 cái này khác nhau hoàn toàn mà e.
DataTable là dùng để lưu trữ dữ liệu.
DataGridview là control dùng để hiển thị dữ liệu lên trên giao diện mà e.

Tom Nguyen viết 19:04 ngày 30/09/2018

Mình lâu rồi không làm .net nên không nhớ lắm. Cơ mà ăn ốc đoán mò theo ngữ nghĩa của 2 từ thì đúng như bạn thấy. DataTable đại diện cho đối tượng cung cấp data còn dataGridView là đối tượng để hiển thị danh sách dữ liệu dưới dạng grid. Theo logic thông thường thì rõ ràng 2 thằng này cần đi với nhau như 1 cặp.
Nếu có kiểu thiết thế nào mà đối tượng vừa là view lại vừa là đối tượng cung cấp data thì có thể gọi nó là hổ lốn

AnNdth viết 18:54 ngày 30/09/2018

Dạ. Tại lúc mới đầu e dùng dgv để add thêm cột cái kiểu và k cần sử dụng dt, nhưng sau thì đc yêu cầu là dùng dt để lưu dữ liệu nên e thắc mắc đó a.

AnNdth viết 18:52 ngày 30/09/2018

V có nghĩa là dt giống như là dữ liệu của dgv hả a?
Chẳng hạn như e dùng hẳn dgv.Rows.Add cũng đc mà a?
Nhưng nếu k dùng dt lưu trữ thì sẽ k thực hiện các thao tác phức tạp hơn trên bảng phải không a?

Phạm Hoàng Tuấn viết 19:03 ngày 30/09/2018

Bởi vì sau này e còn có thể xử lý trên dữ liệu nữa, nên e cần 1 nơi để lưu trữ và xử lý trước khi hiển thị.
Ngoài datatable e còn có thể dùng list

Trang Tuân viết 19:02 ngày 30/09/2018

Mình nghi là lúc đầu bạn dùng sqldatasource để gán dữ liệu trực tiếp lên gridview nên nghĩ là không cần đối tượng lưu trữ dữ liệu, thực ra thì sqldatasource nó làm chuyện đó sẵn giùm thôi, cơ chế thì y như mọi người nói ở trên, người thiết kế kiến trúc ban đầu có dụng ý cả khi tách ra riêng 2 đối tượng này ra.

Chẳng hạn như e dùng hẳn dgv.Rows.Add cũng đc mà a?

Cái này là add từng row, datatable là tập hợp các row với nhiều column tương ứng với các column mà bạn select từ database ra.
Lời khuyên là sau này khi làm rành rồi thì nên chuyển qua dùng List<object> thao tác rất rõ ràng và dễ dàng mà không phải ngồi nhớ tên từng column để gọi ra. Dùng với foreach rất tốt.

AnNdth viết 19:07 ngày 30/09/2018

Anh cho e hỏi là giờ e muôn fill cột cho tràn luôn thì phải làm sao ạ?
Chẳng hạn e tạo 2 cột:

 dtOrder.Columns.Add("Món Ăn");
 dtOrder.Columns.Add("Số Lượng",typeof(int));

giờ em muốn fill cột Món Ăn cho tràn datagridview thì phải làm sao ạ???

À cho e hỏi nếu e add cột bằng cách vào phần design trong datagridview và bấm add column thì cái column này có cách nào cho datatable biết là nó thuộc datatable k ạ?

Phạm Hoàng Tuấn viết 19:06 ngày 30/09/2018

giờ em muốn fill cột Món Ăn cho tràn datagridview thì phải làm sao ạ???

E dùng : this.DataGridView.Columns['MonAn'].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

À cho e hỏi nếu e add cột bằng cách vào phần design trong datagridview và bấm add column thì cái column này có cách nào cho datatable biết là nó thuộc datatable k ạ?

a k hiểu ý e hỏi là gì .Có phải e muốn Column Mon An trong DataGV hiển thị data Column Mon An của DataTable thì e set thuộc tính DataPropertyName của Column trên DataGV là ‘MonAn’

AnNdth viết 19:07 ngày 30/09/2018

this.DataGridView.Columns[‘MonAn’].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

Ý e là e tạo sẵn cột trong DataGridView như vậy:


Giờ ở bên kia e muốn add dữ liệu từ DataTable vào cột mà e tạo sẵn luôn đó. Mà không biết làm sao???
Giả sư 2 cột đó e đặt Name là: colMonAncolSoLuong.

Phần e làm bữa giờ là bên code e tạo ra bằng cách

dtOrder.Columns.Add("Món Ăn");
 dtOrder.Columns.Add("Số Lượng",typeof(int));

Thì khi nhập e muốn thêm dữ liệu thì e sẽ gọi r["Món Ăn"], r[Số Lượng]

Phạm Hoàng Tuấn viết 18:54 ngày 30/09/2018

Giờ ở bên kia e muốn add dữ liệu từ DataTable vào cột mà e tạo sẵn luôn đó. Mà không biết làm sao???Giả sư 2 cột đó e đặt Name là: colMonAn và colSoLuong

DataGridView.DataSource=dtOrder
DataGridView.AutoGenerateColumns=false;

E có thể tham khảo thêm từ đây :

AnNdth viết 19:04 ngày 30/09/2018

Dạ e làm được rồi a. Cám ơn a nhiều nhiều

Bài liên quan
0