DataGridView и SqlDataAdapter не обновляются правильно - PullRequest
0 голосов
/ 24 февраля 2012

Я много смотрю вокруг и не могу понять, откуда возникла эта проблема. Происходит то, что у меня есть представление таблицы данных с использованием BindingSource, SqlDataAdapter, SqlCommandBuilder и DataTable. Представление таблицы данных заполняется простым запросом выбора (который использует только одну таблицу из БД MSSQL-сервера). Я хочу иметь возможность редактировать вещи в этой таблице. Прямо сейчас редактирование работает, но не так, как должно. Я думаю, что я смогу редактировать ячейку, нажать Enter и зафиксировать изменения в базе данных. На самом деле происходит то, что изменения не появляются, пока я не закончу редактирование второй ячейки. Кто-нибудь знает, что я здесь пропускаю? Спасибо!

Вот соответствующий код в файле .cs:

public partial class CheckIn : Form
{

    private BindingSource searchDGVBindingSource = new BindingSource();
    private SqlDataAdapter searchDGVDataAdapter;
    private SqlCommandBuilder searchDGVSqlCommandBuilder;
    private DataTable  searchDGVDataTable;


    public CheckIn()
    {
        InitializeComponent();
        this.Load += new System.EventHandler(CheckIn_Load);
    }

    private void CheckIn_Load(object sender, EventArgs e)
    {
        searchDGV.DataSource = searchDGVBindingSource;
        searchDGVDataAdapter = new SqlDataAdapter(selectCommand, connectionString);
        searchDGVSqlCommandBuilder = new SqlCommandBuilder(searchDGVDataAdapter);
        searchDGVDataTable = new DataTable();
        searchDGVDataTable.Locale = System.Globalization.CultureInfo.InvariantCulture;
        searchDGVDataAdapter.Fill(searchDGVDataTable);
        searchDGVBindingSource.DataSource = searchDGVDataTable;

        searchDGV.AutoResizeColumns();
    }

    private void searchGridView_RowEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        searchDGVDataAdapter.Update(searchDGVDataTable);
    }
}

Вот соответствующий код из файла .Designer.cs:

        // 
        // searchDGV
        // 
        this.searchDGV.AllowUserToAddRows = false;
        this.searchDGV.AllowUserToDeleteRows = false;
        this.searchDGV.BackgroundColor = System.Drawing.Color.White;
        this.searchDGV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.searchDGV.Location = new System.Drawing.Point(10, 250);
        this.searchDGV.MultiSelect = false;
        this.searchDGV.Name = "searchDGV";
        this.searchDGV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
        this.searchDGV.Size = new System.Drawing.Size(619, 150);
        this.searchDGV.TabIndex = 7;
        this.searchDGV.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.searchGridView_CellClick);
        this.searchDGV.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.searchGridView_RowEndEdit);

1 Ответ

2 голосов
/ 25 февраля 2012

Вам нужно вызвать searchDGVBindingSource.EndEdit() в вашем обработчике событий, и он будет работать:

private void searchGridView_RowEndEdit(object sender, DataGridViewCellEventArgs e)
{
    searchDGVBindingSource.EndEdit();
    searchDGVDataAdapter.Update(searchDGVDataTable);
}

Проверьте документацию для BindingSource.EndEdit(), чтобы узнать больше об этом.

...