C# C-自动刷新列表视图

C# C-自动刷新列表视图,c#,C#,我有一个ListView,ListView数据取自数据库。 在ListView旁边有一个添加记录的按钮 如果按下按钮,将显示一个对话框 代码: private void bAddStudent_Click(object sender, EventArgs e) { fAddStudent addStudent = new fAddStudent(); addStudent.ShowDialog(); } 添加记录后,对话框将关闭并显示ListView。 但是ListView不会

我有一个ListView,ListView数据取自数据库。 在ListView旁边有一个添加记录的按钮

如果按下按钮,将显示一个对话框

代码:

private void bAddStudent_Click(object sender, EventArgs e) {
    fAddStudent addStudent = new fAddStudent();
    addStudent.ShowDialog();
}
添加记录后,对话框将关闭并显示ListView。 但是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的代码:


“添加数据”表单与显示ListView表单不同,因此我无法访问“添加数据”表单中的ListView

您需要在每次刷新数据时调用databind方法


根据我对数据的理解,b向数据库中添加新记录,但不显示新记录。如果是这种情况,只需调用DataBind方法,它就会工作。

您可以将记录添加到SQL Server上的表中。由于ListView未绑定,因此不会更新

您可以使用最简单的方法创建一个刷新ListView的方法:


每次在SQL Server表中添加新记录时调用此方法。这样做是不太可能的。我建议您使用,但它更复杂。

显示代码,在其中添加记录。您正在创建和加载ListView的代码在哪里。。?除非发布相关代码,否则很难判断您正在做什么或已经做了什么。您的代码是否应该实际分配listview文本属性?请尝试类似以下操作项[0]。子项[1]。Text=dr[0]。ToString,。。。你能给我举个数据绑定的例子吗?我是C语言新手,很抱歉您将数据添加到列表视图的效率非常低:。有更好的方法可以做到这一点。但是为了让它工作,只需将所有列表视图代码封装到一个单独的方法FillListVIew或类似的方法中,并在每次向数据库添加新的student时调用该方法始终确保显式引用要使用的列,而不是使用*item.SubItems.Adddr[2].ToString;-始终按列名而不是位置引用列。如果数据库发生更改怎么办?您的代码可能会停止工作。尝试类似于此项的操作。SubItems.Adddr[列名称].ToString;是的,我想要所有的专栏。顺便说一句,我已经创建了一个方法来填充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);
}
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); }
}