我的主Windows窗体有一个在程序启动时填充的ListBox。我在主窗体上有一个按钮,用于打开“添加页面”。在这个新窗口中,我可以添加要添加到ListBox的新条目的所有信息。但是,当点击“添加”并关闭辅助表单时,我没有做任何事情来更新ListBox。
有没有办法从辅助窗口调用主窗体的方法populateCollectionList?我遇到的所有解决方案似乎都使解决方案过于复杂。
这是我第一次冒险进入Windows Forms,如有必要,我可以提供任何额外信息。
主要表格:
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();
}
}
答案 0 :(得分:1)
最简单的方法是在对话框关闭时修改button1_Click
并从中调用populateCollectionList
。您可以执行此操作并检查用户是否在对话框中单击了“确定”:
private void button1_Click(object sender, EventArgs e)
{
frmAddItem itemAddPage = new frmAddItem();
if (itemAddPage.ShowDialog() == DialogResult.OK)
{
populateCollectionList();
}
itemAddPage.Dispose();
}
您可以在Form.ShowDialog方法页面上的MSDN上找到类似示例。
您还需要修改populateCollectionList
以刷新列表框。在设置数据源之前添加以下内容:
currentItems.DataSource = null;
如果没有这个,数据源就不会刷新。
答案 1 :(得分:1)
您可以向frmAddItem表单添加一个公共属性,该表单具有对主窗体的引用: public frmMain MainForm;
然后在frmMain button1_Click中将此属性设置为"此": itemAddPage.MainForm = this;
然后在frmAddItem button1_Click中你可以调用populateCollectionList: MainForm.populateCollectionList();
您需要将populateCollectionList函数设为public,以便frmAddItem可以访问该方法