我想在将新成员插入数据库后刷新DataGridView。我在主窗体上创建了一个方法,该方法发生在mainform_load上。从另一种形式(addmember),在我点击SaveMemberButton后,我正在调用该方法来刷新datagridview,但它不会发生。
这是我在主窗体上的代码:
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;
}
在MainForm_Load上,gridview完美地列出了数据。但我无法刷新gridview,我必须重新启动应用程序才能刷新它。有什么建议吗?
答案 0 :(得分:6)
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;
}
并打电话给你的方法。
抱歉英文不好..
答案 1 :(得分:0)
在您插入新成员的代码之后..添加此
MembersDataGridView.DataSource = Connection.ListMembers();