Обновление списка привязки данных C # - PullRequest
0 голосов
/ 22 марта 2012

Я проверил ответы на эту тему, но до сих пор не знаю, почему это не работает! ПОЖАЛУЙСТА, ПОМОГИТЕ!

    private void btnAdd_Click(object sender, EventArgs e)
    {
        SqlCeCommand insTitle = new SqlCeCommand("Insert into Titles(Title) values('" + txtAddTitle.Text +"')");
        insTitle.Connection = dbConnection;

        try 
        {
            if (dbConnection.State == ConnectionState.Closed) { dbConnection.Open(); }
            insTitle.ExecuteNonQuery();


            this.hRDataSet.AcceptChanges();
            this.titlesTableAdapter.Update(this.hRDataSet);
            this.tableAdapterManager.UpdateAll(this.hRDataSet);

            lstTitles.BeginUpdate();
            lstTitles.DataSource = titlesBindingSource;
            lstTitles.DisplayMember = "Title";
            lstTitles.ValueMember = "Title_ID";
            lstTitles.EndUpdate();
        }
        catch (Exception insErr)
        {
            MessageBox.Show(insErr.Message);
        }
    }

Список «lstTitles» не обновляется и не показывает добавленные элементы, несмотря на то, что они есть в базе данных!

1 Ответ

0 голосов
/ 22 марта 2012

Метод Update DataAdapter используется для обновления базы данных с изменениями, внесенными в DataSet.Здесь вам нужно сделать наоборот: вам нужно обновить DataSet измененными данными из базы данных, поэтому вы должны использовать Fill, а не Update.

В любом случае, ваш подходне оптимально;так как вы работаете с наборами данных, вы должны добавить новое значение в соответствующую таблицу в DataSet, а затем обновить базу данных методом Update.ListBox автоматически примет изменения.

private void btnAdd_Click(object sender, EventArgs e)
{
    try 
    {
        // Add a row to the DataTable
        DataRow row = hRDataSet.Titles.NewRow();
        row["Title"] = txtAddTitle.Text;
        hRDataSet.Titles.Rows.Add(row);

        // Update the database
        this.titlesTableAdapter.Update(this.hRDataSet);

        // That's it, you're done ;)
    }
    catch (Exception insErr)
    {
        MessageBox.Show(insErr.Message);
    }
}
...