C# 单击按钮从另一个窗体刷新DataGridView
我想在将新成员插入数据库后刷新DataGridView。我在主窗体上创建了一个方法,该方法发生在mainform\u加载上。在另一个表单(addmember)中,单击SaveMemberButton后,我调用该方法来刷新datagridview,但它不会发生 这是我在主窗体上的代码:C# 单击按钮从另一个窗体刷新DataGridView,c#,winforms,sql-server-2008-r2,C#,Winforms,Sql Server 2008 R2,我想在将新成员插入数据库后刷新DataGridView。我在主窗体上创建了一个方法,该方法发生在mainform\u加载上。在另一个表单(addmember)中,单击SaveMemberButton后,我调用该方法来刷新datagridview,但它不会发生 这是我在主窗体上的代码: private void MainForm_Load(object sender, EventArgs e) { //ShowLoginForm();
private void MainForm_Load(object sender, EventArgs e)
{
//ShowLoginForm();
ListMembers();
}
public void ListMembers()
{
MembersDataGridView.Columns.Clear();
MembersDataGridView.DataSource = Connection.ListMembers();
MembersDataGridView.ClearSelection();
}
这是我在另一张表格上的代码:
private MainForm mainForm = new MainForm();
private void SaveMemberButton_Click(object sender, EventArgs e)
{
try
{
if (IsValid())
{
var member = new Member
{
Name = AddNewNameTextBox.Text,
Surname = AddNewSurnameTextBox.Text,
EntryDate = DateTime.ParseExact(AddNewEntryDateTextBox.Text, "dd.MM.yyyy", CultureInfo.InvariantCulture),
};
Connection.InsertMember(member);
MessageBox.Show("Member registration successful!");
}
mainForm.ListMembers();
this.Close();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
这是从数据库获取数据的代码:
public List<Member> ListMembers()
{
List<Member> list = new List<Member>();
string SelectMembers = "SELECT * FROM Members";
sqlConnection.Open();
using (sqlCommand = new SqlCommand(SelectMembers, sqlConnection))
{
var sqlReader = sqlCommand.ExecuteReader();
while (sqlReader.Read())
{
var member = new Member
{
Id = Convert.ToInt32(sqlReader["Id"]),
Name = sqlReader["Name"].ToString(),
Surname = sqlReader["Surname"].ToString(),
EntryDate = Convert.ToDateTime(sqlReader["EntryDate"])
};
list.Add(member);
}
}
sqlConnection.Close();
return list;
}
公共列表列表成员()
{
列表=新列表();
string SelectMembers=“从成员中选择*”;
sqlConnection.Open();
使用(sqlCommand=newsqlcommand(SelectMembers,sqlConnection))
{
var sqlReader=sqlCommand.ExecuteReader();
while(sqlReader.Read())
{
var成员=新成员
{
Id=Convert.ToInt32(sqlReader[“Id”]),
Name=sqlReader[“Name”].ToString(),
姓氏=sqlReader[“姓氏”]。ToString(),
EntryDate=Convert.ToDateTime(sqlReader[“EntryDate”])
};
名单.增加(成员);
}
}
sqlConnection.Close();
退货清单;
}
在MainForm_Load上,gridview完美地列出了数据。但是我不能刷新gridview,我必须重新启动应用程序来刷新它。有什么建议吗?在插入新成员的代码之后。。加上这个
MembersDataGridView.DataSource = Connection.ListMembers();
在插入新成员的代码之后。。加上这个
MembersDataGridView.DataSource = Connection.ListMembers();
MainForm在处理过程中始终保持打开状态 如果是,请在以下位置创建“MainForm”的新实例:
private MainForm mainForm = new MainForm();
因此,您正在刷新“MainForm”的第二个实例,但在“MainForm”的第一个实例中看不到它。您必须将“MainForm”实例发送到另一个表单。不要创建新实例。要在创建其他表单时执行此操作,请将“MainForm”实例发送到其他表单:
private void ShowForm2()
{
Form2 form = new Form2(this);
form.Show();
}
使您的Form2构造函数如下所示:
private MainForm mainForm;
public Form2(MainForm form)
{
InitializeComponent();
mainForm = form;
}
并调用您的方法
抱歉,英语不好。MainForm在处理过程中始终保持打开状态吗 如果是,请在以下位置创建“MainForm”的新实例:
private MainForm mainForm = new MainForm();
因此,您正在刷新“MainForm”的第二个实例,但在“MainForm”的第一个实例中看不到它。您必须将“MainForm”实例发送到另一个表单。不要创建新实例。要在创建其他表单时执行此操作,请将“MainForm”实例发送到其他表单:
private void ShowForm2()
{
Form2 form = new Form2(this);
form.Show();
}
使您的Form2构造函数如下所示:
private MainForm mainForm;
public Form2(MainForm form)
{
InitializeComponent();
mainForm = form;
}
并调用您的方法
抱歉,英语不好。-\我在方法中有此代码。这行不通。我也试着只写这行代码,但仍然不起作用。这行不通。我也试着只写这行代码,但还是不行。先生,你救了我。谢谢:)干杯!这是非常有帮助的,我遇到了同样的问题,这是有效的!将
此
表单的实例传递到另一个表单并访问公众。先生,您救了我。谢谢:)干杯!这是非常有帮助的,我遇到了同样的问题,这是有效的!将此
表单的实例传递到另一个表单,并访问Public。