C# - 自动刷新列表视图
本文关键字:列表 视图 刷新 | 更新日期: 2023-09-27 17:57:15
我有一个ListView
,ListView
数据是从数据库中获取的。在ListView
旁边有一个按钮来添加记录。
如果按下按钮,它将显示一个对话框
法典:
private void bAddStudent_Click(object sender, EventArgs e) {
fAddStudent addStudent = new fAddStudent();
addStudent.ShowDialog();
}
添加记录后,对话框将close()
并显示列表视图。但ListView
不是更新数据。
有没有办法让它自动更新?
编辑:这是我添加记录的方式:
private void btnAdd_Click(object sender, EventArgs e) {
string studentID = tbStudentId.Text;
string studentName = tbStudentName.Text;
string gender = tbGender.Text;
string connectionString = "Data Source=xxx''SQLEXPRESS;Initial Catalog=TestApplication;Integrated Security=SSPI; User ID=xxx;Password=xxx";
using (SqlConnection connection = new SqlConnection(connectionString)) {
SqlCommand cmd = new SqlCommand("INSERT INTO student (student_id, student_name, student_gender) VALUES (@studentId, @studentname, @studentGender) ");
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.Parameters.AddWithValue("@studentId", studentID);
cmd.Parameters.AddWithValue("@studentName", studentName);
cmd.Parameters.AddWithValue("@studentGender", gender);
connection.Open();
cmd.ExecuteNonQuery();
}
}
显示ListView
的代码:
List<string> myListHeader = new List<string>(new string[] { "ID", "Name", "Gender" });
myListHeader.ForEach(name => lvStudent.Columns.Add(name));
SqlConnection UGIcon = new SqlConnection();
UGIcon.ConnectionString = "Data Source=xxx''SQLEXPRESS;Initial Catalog=TestApplication;Integrated Security=SSPI; User ID=xxx''user;Password=xxx";
UGIcon.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM student", UGIcon);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read()) {
ListViewItem item = new ListViewItem(dr[0].ToString());
item.SubItems.Add(dr[1].ToString());
item.SubItems.Add(dr[2].ToString());
lvStudent.Items.Add(item);
}
注意
"添加数据"表单与显示ListView
表单不同,因此我无法访问"添加数据"表单中的ListView
每次要刷新数据时都需要调用 databind() 方法。
据我了解,a)显示数据,b)将新记录添加到数据库,但不显示新记录。如果是这种情况,只需调用 DataBind() 方法,它应该可以工作。
将记录添加到 SQL Server 上的表中。由于您的ListView
未绑定,因此不会更新。
你可以用最简单的方法创建一个刷新ListView
的方法:
private void RefreshListView()
{
// clear ListView
lvStudent.Items.Clear();
List<string> myListHeader = new List<string>(new string[] { "ID", "Name", "Gender" });
myListHeader.ForEach(name => lvStudent.Columns.Add(name));
SqlConnection UGIcon = new SqlConnection();
UGIcon.ConnectionString = "Data Source=xxx''SQLEXPRESS;Initial Catalog=TestApplication; Integrated Security=SSPI; User ID=xxx''user;Password=xxx";
UGIcon.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM student", UGIcon);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read()) {
ListViewItem item = new ListViewItem(dr[0].ToString());
item.SubItems.Add(dr[1].ToString());
item.SubItems.Add(dr[2].ToString());
lvStudent.Items.Add(item); }
}
每次向 SQL Server 表添加新记录时调用此方法。这样做是不太可能的。我建议您使用绑定,但它更复杂。