0

update メソッドのフォームがあり、フォームは詳細ビューにあります。テキストボックスの横に、データベース テーブル内のすべての名前の名前を表示するリスト ボックスがあります。リストボックスの下には、ユーザーが名前を入力したい場合に備えて名前をすばやく検索するための追加のテキストボックスもあります.

John を Jonathan に変更するなど、名前の 1 つを更新しようとすると、SQL サーバーで確認したようにデータベースが新しい名前で更新されますが、リストボックスの名前は変更されません! リストボックスが現在選択されている位置を movefirst() に移動することで、これを修正する汚い方法があります。ただし、リストボックスの下には、前述のようにクイック検索のテキスト ボックスがあるので、検索テキスト ボックスに「Jonathan」と入力しますが、何も表示されません。ただし、以前の名前である John を入力すると、テーブル内のこの行の詳細が表示されます。

これを修正する方法はありますか?

更新 1:

リストボックスのデータソースをnullにしてから再度割り当ててみましたが、うまくいきません。更新フォームのコードを以下に示します。


名前空間 WindowsFormsApplication1 { public 部分クラス updateContact : Form { public updateContact() { InitializeComponent(); }

    private void updateContact_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'tblcontactsupdate.tblContacts' table. You can move, or remove it, as needed.
        this.tblContactsTableAdapter.Fill(this.tblcontactsupdate.tblContacts);
    }
    private void btnUpdateContact_Click(object sender, EventArgs e)
    {
        int x;

        Program.da.UpdateCommand = new SqlCommand("Update tblContacts SET FIRSTNAME = @FIRSTNAME, LASTNME = @LASTNME WHERE ID = @ID", Program.cs);
        Program.da.UpdateCommand.Parameters.Add("@FIRSTNAME", SqlDbType.VarChar).Value = fIRSTNAMETextBox.Text;
        Program.da.UpdateCommand.Parameters.Add("@LASTNME", SqlDbType.VarChar).Value = lASTNMETextBox.Text;
        Program.da.UpdateCommand.Parameters.Add("@ID", SqlDbType.VarChar).Value = iDTextBox.Text;

        Program.cs.Open();
        x = Program.da.UpdateCommand.ExecuteNonQuery();
        Program.cs.Close();

        if (x >= 1)
        {
            MessageBox.Show("Record(s) has been updated");
            Program.ds.Clear();
            Program.da.Fill(Program.ds);
            txtfindUpdatecontact.Text = "";
            //lbupdateContact.DataSource = null;
            //lbupdateContact.DataSource = this.tblcontactsupdate.tblContacts;
        }       
    }
    private void txtfindUpdatecontact_TextChanged(object sender, EventArgs e)
    {
        if (!txtfindUpdatecontact.Text.Equals(""))
        {
            this.tblContactsBindingSource.Filter = "FIRSTNAME = '" + txtfindUpdatecontact.Text + "'";

        }
        else
        {
            this.tblContactsBindingSource.RemoveFilter();
        }
    }

    private void lbupdateContact_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    private void iDTextBox_TextChanged(object sender, EventArgs e)
    {

    }

    private void fIRSTNAMETextBox_TextChanged(object sender, EventArgs e)
    {

    }

    private void lASTNMETextBox_TextChanged(object sender, EventArgs e)
    {

    }
}

}

4

2 に答える 2

2

DataSourceソースを更新した後、リストボックスの をもう一度設定する必要があります。

以下のようなもの:それは私のデータです:

 public class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }

    public class MyDataSource
    {
        public static List<Person> Persons = new List<Person>
        {
            new Person{Age=30,Name="Ram"},
            new Person{Age=33,Name="Rahim"},
        };
    }

次に、フォームのコンストラクターで次のことができます。

 listBox1.DataSource = MyDataSource.Persons;
 listBox1.DisplayMember = "Age";

次に、更新のために、以下のようなもの:

private void button1_Click(object sender, EventArgs e)
        {
            MyDataSource.Persons[0].Age = 45;
            listBox1.DataSource = null;
            listBox1.DataSource = MyDataSource.Persons;
            listBox1.DisplayMember = "Age";
        }

これは、必要に応じて変更するコードの例にすぎません。

于 2012-07-27T20:19:42.320 に答える
1

DataSource が DataTable の場合、次のように AcceptChanges() を呼び出すだけです。

listBox.DataSource = null;  
((DataTable)listBox.DataSource).AcceptChanges();  
于 2015-09-16T17:02:06.743 に答える