PDA

View Full Version : gán dữ liệu đang chọn của Gridview1 vào gridview2



rivalred3490
22-05-2011, 17:38
Xin các anh chỉ giáo cho em với. Em có 2 gridview nằm cùng 1 form. Gridview1 hiển thị danh sách các mặt hàng gồm: mã hàng, tên hàng, số lượng..v.v.. Gridview2 dùng để hiển thị các giá trị như mã hàng, tên hàng..v..v. của rows mà em đang chọn ở gridview1(cái này thì em làmđược rồi). Nhưng em không biết làm sao để kiểm tra nếu mã hàng mà em đang chọn ở Gridview1 đã được chọn(đã có) trong Gridview2 rồi thì chỉ cần cộng thêm số lượng ứng với mã hàng đó thôi. Em không biết làm như vậy, mỗi lần em nhấp vào là nó sinh ra 1 dòng trong Gridview2 dù đã có mã hàng đó rồi, thành ra nhấp 3 lần MHang1 trên Gridview1 sẽ có 3 dòng MHang1 hiện trên Gridview2 luôn. Theo hướng dẫn thì em làm như vầy:
private void grdMatHang_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{

try
{
foreach (DataGridViewRow row in grdHDBL.Rows)
{
if(grdMatHang.CurrentRow.Cells["mã hàng"].Value.ToString()==row.Cells[0].Value.ToString())
{
MessageBox.Show("Tồn tại");
}
}
}
catch (Exception ex)
{
MessageBox.Show("" + ex.Message);
}

}

Làm như trên thì nó báo lỗi:"Object reference not set to an instance of an object.".
Xin giúp em với, 2 ngày nay em search rồi mà ko có ai hỏi như em. Em cám ơn trước.

nakul89
22-05-2011, 21:04
Em đang lập trình bằng webform thì em có thể dùng <EditorField> để thêm những cột mà mình mong muốn, nhưng mà em phải dùng LinqDataSource

silverdragoon
23-05-2011, 01:45
Bạn làm giỏ hàng phải ko?
Vậy bạn có thể làm như thế này:
- Trong dataset tạo thêm 1 DataTable ... tạm gọi là cart nhé, và add columns cho nó (ví dụ: "ID","Name","Quantity") dùng để lưu thông tin những sản phẩm user lựa chọn
- Còn đây là phần code bạn có thể tham khảo

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable cart = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dsProduct.Products' table. You can move, or remove it, as needed.
this.productsTableAdapter.Fill(this.dsProduct.Prod ucts);
initCart();
}

private void initCart()
{
cart.Columns.Add("ID");
cart.Columns.Add("Name");
cart.Columns.Add("Quantity");
}

private void button1_Click(object sender, EventArgs e)
{
bool existed = false;
DataRowView drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView;
foreach (DataRow dr in cart.Rows)
{
if (dr["ID"].ToString() == drv["ProductID"].ToString())
{
dr["Quantity"] = int.Parse(dr["Quantity"].ToString()) + 1;
existed = true;
break;
}
}
if (!existed)
{
DataRow row = cart.NewRow();
row[0] = drv["ProductID"].ToString();
row[1] = drv["Name"].ToString();
row[2] = "1";
cart.Rows.Add(row);
}
dataGridView2.DataSource = cart;
}
- sau cùng với những dữ liệu trong datagridview2 tùy bạn làm gì với db thì làm.

Goodluck ;)

rivalred3490
23-05-2011, 09:39
Bạn làm giỏ hàng phải ko?
Vậy bạn có thể làm như thế này:
- Trong dataset tạo thêm 1 DataTable ... tạm gọi là cart nhé, và add columns cho nó (ví dụ: "ID","Name","Quantity") dùng để lưu thông tin những sản phẩm user lựa chọn
- Còn đây là phần code bạn có thể tham khảo

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable cart = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dsProduct.Products' table. You can move, or remove it, as needed.
this.productsTableAdapter.Fill(this.dsProduct.Prod ucts);
initCart();
}

private void initCart()
{
cart.Columns.Add("ID");
cart.Columns.Add("Name");
cart.Columns.Add("Quantity");
}

private void button1_Click(object sender, EventArgs e)
{
bool existed = false;
DataRowView drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView;
foreach (DataRow dr in cart.Rows)
{
if (dr["ID"].ToString() == drv["ProductID"].ToString())
{
dr["Quantity"] = int.Parse(dr["Quantity"].ToString()) + 1;
existed = true;
break;
}
}
if (!existed)
{
DataRow row = cart.NewRow();
row[0] = drv["ProductID"].ToString();
row[1] = drv["Name"].ToString();
row[2] = "1";
cart.Rows.Add(row);
}
dataGridView2.DataSource = cart;
}
- sau cùng với những dữ liệu trong datagridview2 tùy bạn làm gì với db thì làm.

Goodluck ;)

Bạn SilverDragon ơi! mình không biết phải cám ơn bạn sao nữa. mình làm được rồi. Nhờ bạn cả đó, cám ơn bạn nhiều lắm, 3 ngày nay search mãi mà không có cách nào. hihi.. Một lần nữa cho mình cảm ơn bạn! ^_^

silverdragoon
24-05-2011, 14:43
You welcome ^^.
20 chars