0

我有一个ListViewListView数据是从数据库中获取的。旁边ListView有一个按钮来添加记录。

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

代码 :

private void bAddStudent_Click(object sender, EventArgs e) {
    fAddStudent addStudent = new fAddStudent();
    addStudent.ShowDialog();
}

添加记录后,对话框将close()显示 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

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“添加数据”表单

4

2 回答 2

1

每次要刷新数据时,都需要调用 databind() 方法。

据我了解,a)显示数据,b)向数据库添加新记录,但未显示新记录。如果是这种情况,只需调用 DataBind() 方法,它应该可以工作。

于 2013-02-04T07:27:19.087 回答
1

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

您可以采用最简单的方法并创建一个 refresh 方法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 表添加新记录时调用此方法。这样做是不太可能的。我建议您使用bindings,但它更复杂。

于 2013-02-04T07:47:29.917 回答