C# - 自动刷新列表视图

本文关键字:列表 视图 刷新 | 更新日期: 2023-09-27 17:57:15

我有一个ListViewListView数据是从数据库中获取的。在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

C# - 自动刷新列表视图

每次要刷新数据时都需要调用 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 表添加新记录时调用此方法。这样做是不太可能的。我建议您使用绑定,但它更复杂。