【问题标题】:Cannot update datagridview from another form [duplicate]无法从其他表单更新 datagridview [重复]
【发布时间】:2016-09-23 07:18:04
【问题描述】:

这就是我想做的。一个面板里面有一个datagridview,这个面板在一个tabcontrol里面的一个tabPage里面,这个tabcontrol在Form1里面。

   Form1 --> TabControl  --> tabPage  --> panel  --> **DATAGRIDVIEW**

从我的主窗体中,我调用 Form2,例如 Form2.Show(),用户将在其中输入一些内容,然后如果用户单击按钮让我们说“保存更改”,Form 2 将关闭,在 Form1 中,我希望更新数据网格。当用户单击 Form2 Save Changes 中的按钮时。代码如下:

在表格 1 中:

private void btnEditItem_Click(object sender, EventArgs e)
{
    Form3 form3 = new Form3();
    Form1 frm = this.MdiParent as Form1;
    form3.Show();

    this.Hide();  
}

在第二种形式中:

private void flatButton1_Click(object sender, EventArgs e)
{
    DialogResult dr = MessageBox.Show("Save Changes?", "Confirmation", MessageBoxButtons.YesNo);
    if (dr == DialogResult.Yes)
    {

        Form form1 = (Form)this.MdiParent;
        DataGridView dt = (DataGridView)form1.Controls["flatTabControl1"].Controls["tabPage5"].Controls["panelUpdateRequest"].Controls["dataGridRequestItemsUpdate"];
        dt.Rows[0].Cells[0].Value = "Plsss";**

        this.Hide();
        form1.Show();

    }
}

错误:

Datagridview dt = (DataGridView)..Null Reference Exception.

【问题讨论】:

标签: c# winforms


【解决方案1】:
Form form1 = (Form)this.MdiParent;

这是您的表格 3,而不是表格 1。您需要表格 1 的参考资料。

在表格 2 中,您需要这样的内容:

public From3(Form1 form)
{
 // save the reference of the form 1 in form 3 to use it
}

然后你可以从 form1 调用它:

form3.show(this);

希望对你有帮助

【讨论】:

  • 先生,我有点不明白?能否进一步解释一下?
  • @PoorGrammer "this" 是获取类的当前实例的关键字。您调用“this.MdiParent”,因此这是您的 form3 的参考。所以很明显你得到一个空引用异常,因为form3中没有gridview。您需要在您的网格所在的 form1 的参考。要获得网格,您需要将表单 1 的引用传递给表单 3。
  • 那么先生,我要在 public Form3(form1 form) 中放入什么{}
  • @PoorGrammer 是的,有点。您将变量 Form1(例如这里 var) 添加到 Form3 和下面的方法 public Form3(form1 form){ this.var = form;然后你为这一行使用这个“var”变量 DataGridView dt = (DataGridView)var.Controls["flatTabControl1"].Controls["tabPage5"].Controls["panelUpdateRequest"].Controls["dataGridRequestItemsUpdate"];现在你打开 From3 并给它 form1: form3.show(this);希望你能以某种方式理解它。
【解决方案2】:

以您的第一种形式定义一个函数:

public DataGridView GetDataGridView()
{
    return this.dataGridRequestItemsUpdate;
}

并以第二种形式检索它:

Form form1 = (Form)this.MdiParent;
var dataGridView = form1.GetDataGridView();

【讨论】:

  • 还是一样的先生。仍然得到那个空引用异常:(
  • 你确定你在datagridview上得到它吗?检查form1 是否不为空。
  • 先生,我要把表格放在哪里 form1 = (Form)this.MdiParent; var dataGridView = form1.GetDataGridView();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多