如何在c#中从另一个表单刷新datagrid视图

时间:2017-08-03 04:12:25

标签: c# forms datagrid

首先,我想询问如何从另一个表单刷新Datagrid视图,因为在下面的代码中我无法从第二个表单刷新它。

这是我刷新“收银员交易表格”中的数据网格视图的方式。

public void loadData()
    {
        var load = (from x in db.tbltransaction
                      join z in db.tblproduct
                      on x.product_ID equals z.ID
                      where x.status.Equals(0)
                      select new
                      {
                          TransactionID = x.belanjaID,
                          ProductID = x.produk_ID,
                          ProductName = z.namaBarang,
                          quantity = x.jumlahBarang,
                          Subtotal = x.subtotal
                      });
        dgvtransaction.DataSource = load;
        dgvtransaction.Columns[0].Visible = false;
    }

罗。我想要做的是当我以第二种形式添加数据并关闭它(因此事件是 FormClosed “收银员搜索产品表格“”可以在“收银员交易表格”中加载“dgvtransaction”

到目前为止,这是第二个表单上的代码,在关闭后的第一个dgv上加载数据。)

Cashier Transaction Form pk;
    private void Cashier Search Product Form_FormClosed(object sender, FormClosedEventArgs e)
    {
        pk.loadData();
    }

错误是“对象引用未设置为对象的实例。”

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在创建父表单的新实例,但您需要传递对原始表单的引用。

public class CashierSearchProductForm
{
    CashierTransactionForm pk;
    public CashierSearchProductForm(CashierTransactionForm pk)
    {
        this.pk = pk;
    }

    private void CashierSearchProduct Form_FormClosed(object sender, FormClosedEventArgs e)
    {
        pk.loadData();
    }

    ...
}

...

var csp = new CashierSearchProductForm(this);

更好的是,只需从原始表单订阅FormClosed事件:

var csp = new CashierSearchProductForm(this);
csp.FormClosed += (s,e) => pk.loadData();