0

私は持っていListViewて、ListViewデータはデータベースから取得されます。横に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

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 テーブルに新しいレコードを追加するたびに、このメソッドを呼び出します。そのようなことをする可能性はかなり低いです。bindingsを使用することをお勧めしますが、より複雑です。

于 2013-02-04T07:47:29.917 に答える
1

データを更新するたびに databind() メソッドを呼び出す必要があります。

私が理解したことから、a)データを表示し、b)データベースに新しいレコードを追加しますが、新しいレコードは表示されません。この場合は、DataBind() メソッドを呼び出すだけで機能します。

于 2013-02-04T07:27:19.087 に答える