首页 > 解决方案 > Datagridview 不更新数据源

问题描述

我正在使用 Windows 窗体应用程序。我在表格上创建了​​列表,并在添加按钮上创建了新窗口。当新记录正在添加时,数据源正在更新,但 gridview 不显示最后添加的记录。为什么会这样?

public MainForm()
    {
        InitializeComponent();
        BindCompanyData();
    }

 public void BindCompanyData()
    {
        List<CompanyListModel> companyListModel = new List<CompanyListModel>();
        companyListModel =  _obiClient.GetCompanies();
        companyDataGrid.DataSource = null;
        companyDataGrid.DataSource = companyListModel;
        companyDataGrid.Refresh();
        companyDataGrid.CellClick += new DataGridViewCellEventHandler(DatGridCell_Click);
    }

private void btn_addCompany_Click(object sender, EventArgs e)
    {
        CompanyAddEdit companyAddEdit = new CompanyAddEdit();
        companyAddEdit.ShowForm();
    }

在按钮上添加它打开新表单。在关闭该表格时,我称之为BindCompanyData()方法。

 private void btn_save_Click(object sender, EventArgs e)
    {
        string selectedItem = cmbbx_companyType.SelectedItem.ToString();            
        WriteXML(selectedItem);
        this.Close();
        MainForm mainForm = new MainForm();
        mainForm.BindCompanyData();
    }

什么不见​​了?

标签: c#winformsdatagridview

解决方案


您的问题是您正在BindCompanyData();使用代码在新创建的表单上运行:

MainForm mainForm = new MainForm();
mainForm.BindCompanyData();

您应该做的是在CompanyAddEdit构造函数中请求MainForm form参数并传递您在按钮中使用的当前表单。所以你的代码看起来像这样:

//Inside CompanyAddEdit form
class CompanyAddEdit : Form
{
    MainForm passedForm;

    public CompanyAddEdit(MainForm form)
    {
        this.passedForm = form;
    }
    //other code
    private void btn_save_Click(object sender, EventArgs e)
    {
        string selectedItem = cmbbx_companyType.SelectedItem.ToString();            
        WriteXML(selectedItem);
        this.Close();

        passedForm.BindCompanyData();
   }
}



//Inside main form
private void btn_addCompany_Click(object sender, EventArgs e)
{
    CompanyAddEdit companyAddEdit = new CompanyAddEdit(this);
    companyAddEdit.ShowForm();
}

推荐阅读