如何从另一个窗体重新查询windows窗体中列表框中的信息

本文关键字:窗体 列表 信息 重新查询 另一个 windows | 更新日期: 2023-09-27 18:28:23

我有一个带有ListBox的主Windows窗体,它在程序启动时填充。我在主窗体上有一个按钮,可以打开一个"添加页面"。在这个新窗口中,我可以为要添加到ListBox的新条目添加所有信息。但是,当单击"添加"并关闭辅助窗体时,我不会做任何事情来更新ListBox。

有没有办法从辅助窗口调用主窗体的方法populateCollectionList?我遇到的所有解决方案似乎都使解决方案过于复杂。

这是我第一次冒险进入Windows窗体,如有必要,我可以提供任何额外信息。

主要形式:

public partial class frmMain : Form
{
    String connectionString;
    SqlConnection connection;
    public frmMain()
    {
        InitializeComponent();
        connectionString = ConfigurationManager.ConnectionStrings["CollectionsManager.Properties.Settings.CollectionsConnectionString"].ConnectionString;
    }
    private void frmMain_Load(object sender, EventArgs e)
    {
        populateCollectionList();
    }
    private void populateCollectionList()
    {
        using (connection = new SqlConnection(connectionString))
        using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Bottlecaps", connection))
        {
            DataTable collectionTable = new DataTable();
            adapter.Fill(collectionTable);
            currentItems.ValueMember = "Id";
            currentItems.DisplayMember = "Maker";
            currentItems.DataSource = collectionTable;
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        frmAddItem itemAddPage = new frmAddItem();
        itemAddPage.ShowDialog();
    }
}

二级表单("添加表单"):

public partial class frmAddItem : Form
{
    String connectionString;
    SqlCommand command;
    SqlConnection connection;
    public frmAddItem()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        connection = new SqlConnection(@"Data Source=(LocalDB)'v11.0;AttachDbFilename=C:'mdfPath;Integrated Security=True");
        connection.Open();
        insertTextFields();
        connection.Close();
        this.Close();
        // THIS IS WHERE I NEED TO MAKE THE CALL TO REPOPULATE LIST
    }
    private void insertTextFields()
    {
        command = new SqlCommand("INSERT INTO Table (SomeParams) VALUES (@someParams)", connection);
        command.Parameters.AddWithValue("@param1", txtField1.Text);
        //....
        command.Parameters.AddWithValue("@param2", txtField2.Text);
        command.ExecuteNonQuery();
    }
}

如何从另一个窗体重新查询windows窗体中列表框中的信息

您可以将一个公共属性添加到frmAddItem表单中,该表单引用了主表单:公共frmMainForm;

然后在frmMain按钮1_Click中将此属性设置为"this":itemAddPage.MainForm=this;

然后在frmAddItem按钮1_Click中,您可以调用populateCollectionList:MainForm.popupleCollectionList();

您需要公开populateCollectionList函数,以便frmAddItem可以访问方法

最简单的方法是修改button1_Click,并在对话框关闭时从中调用populateCollectionList。你可以这样做,并检查用户是否在对话框中点击了OK:

private void button1_Click(object sender, EventArgs e)
{
    frmAddItem itemAddPage = new frmAddItem();
    if (itemAddPage.ShowDialog() == DialogResult.OK) 
    {
        populateCollectionList();
    }
    itemAddPage.Dispose();
}

您可以在MSDN的Form.ShowDialog方法页面上找到类似的示例。


您还需要修改populateCollectionList以刷新列表框。在设置数据源之前添加以下内容:

currentItems.DataSource = null;

没有这个,数据源就不会刷新。