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