Em có form1 và form2 . Trong form1 em có: form2 f2=new form2();f2.ShowDialog();. Ở form1 em có 1 datagridview.
Cho em hỏi làm sao ở form 2 em có thể dùng được dữ liệu của datagridview ở form1 vậy?
Mong mọi người giúp đỡ!
Mình xin cảm ơn trước!
Anh nghĩ em chỉ việc khai báo bên form2 là form1 f1 = new form1(); Rồi bên datagridview của form1 em chỉ việc public nó lên là sử dụng ngon.
ủa f2.datagridview=f1.datagirdview (dạng vậy ak, chớ a quên nó viết sao mất rồi) không được hở em, :D:D
Bản chuyển thuộc tính Modifiers (ở phần properties) của control trên từ private sang public là được.
Trong form 1 gọi mở ra form 2 , rồi trong form 2 cũng phải khai báo 1 cái form 1 nữa . Hình như là thế này :
trong form 2 : public form1 f1 = new form1();
trong phần gọi form2 của form1 thì : form2 f2 = new form2(); f2.f1 = this ; f2.ShowDialog();
rồi trong form2 mún sử dụng datagrid của f1 thì : f1.datagrid… ( nhớ là phải public cái datagid)
Có nhiều cách truyền data giữa 2 form lắm .
Mình thì làm như thế này:
Ở Form 1 bạn tạo một nút để load Form 2, chẳng hạn đặt button tên Form2 và bắt sự kiện click:
private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(dataGridView1);
f2.Show();
}
Ở Form 2, bạn khai báo ở ngoài một DataGridview với tên bắt kì, chẳng hạn “data” và truyền dữ liệu thông qua hàm “public Form2(DataGridView dt){}”:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
DataGridView data;
public Form2(DataGridView dt)
{
InitializeComponent();
data = dt;
}
}
Bây giờ thì bạn đã có thể dùng dữ liệu của datagridview ở Form1 thông qua biến “data” ở form2
[QUOTE=10520515;40828]Mình thì làm như thế này:
Ở Form 1 bạn tạo một nút để load Form 2, chẳng hạn đặt button tên Form2 và bắt sự kiện click:
private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(dataGridView1);
f2.Show();
}
Ở Form 2, bạn khai báo ở ngoài một DataGridview với tên bắt kì, chẳng hạn “data” và truyền dữ liệu thông qua hàm “public Form2(DataGridView dt){}”:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
DataGridView data;
public Form2(DataGridView dt)
{
InitializeComponent();
data = dt;
}
}
Bây giờ thì bạn đã có thể dùng dữ liệu của datagridview ở Form1 thông qua biến “data” ở form2[/QUOTE]
Khi khai báo kiểu dữ liệu DataGridView dt; cái DataGridView này có có đâu mà mình định nghĩa cho cái dt?
[QUOTE=10520101;40875]Khi khai báo kiểu dữ liệu DataGridView dt; cái DataGridView này có có đâu mà mình định nghĩa cho cái dt?[/QUOTE]
Bạn hỏi vậy mình cũng không biết bạn đang hỏi cái gì.
cái DataGridView này có có đâu mà mình định nghĩa cho cái dt
DataGridView dt ở đây là tham biến của hàm nha bạn, cũng như bạn khai báo int a; long b; bool R…vậy thôi.
Khi bạn load Form2 thì datagridview1( cái này thuộc form1) đã được truyền vào hàm Form2(DataGridView dt) rồi. Bầy giờ chỉ việc lấy một biến ở Form 1 để gán datagridview1 cho nó thôi.
P/s: không biết bạn đã chạy thử phần code của mình chưa khi hỏi câu này. Mình đã test và OK rồi nhá.
Được rồi cảm ơn bạn. Lúc đầu cái này DataGridView data; mình gõ DataGrid mà chưa thấy hiện ra chữ DataGridView nên mình nghĩ là ko có kiểu dữ liệu DataGridView nên mình mới nói thế!
thử làm thế này nhá. trong Form2 bạn cũng khai báo 1 DataGridView
private DataGridView _dataGridView=new DataGridView();
rồi bạn tạo 1 thuộc tính cho nó
public DataGridView dataGridView
{
get{return _dataGridView;}
set{_dataGridView=value;}
}
trong Form2 bạn cứ sử dụng _dataGridView như nó là DataGridView của Form1. trong Form1, bạn chỉ cần gán thuộc tính cho DataGridView của Form1 cho Form2 nữa là xong
Form2 frm2=new Form2();
frm2.dataGridView=dataGridView1; //dataGridView1 là DataGridView của Form1
... //Gọi các hàm của Form2
frm2.ShowDialog();
không biết có đúng hay không nữa! cứ thử xem ^^
P/s: Sao forum không để thẻ code ra ngoài bản trả lời nhanh này nhỉ? cứ phải đến bản đầy đủ trức năng mới đc >"<
Thử cách này xem sao.
Dùng 1 static class lưu dữ liệu của datagridview, có thể là list<>, arraylist hay bất cứ cái gì có thể. Các datagridview chỉ làm nhiệm vụ hiển thị dữ liệu, muốn bao nhiêu datagridview cũng được. Thêm 1 cơ chế đồng bộ để khi datagridview này thay đổi giá trị thì cái khác cũng cập nhật nữa là xong.
Ah tiện đây mọi người cho hỏi: mình vẽ trước 1 hình bằng lệnh DrawImage, sau đó muốn xóa nó đi thì có thể dùng lệnh gì?