У меня есть флажок в DataGridView с привязкой к данным, который при проверке открывает всплывающую форму.Я заполняю форму и закрываю ее, и данные в форме заполняются в строке.Но изменения не сохраняются.
Я могу вручную редактировать ячейки, и они успешно сохранены.Но программно не сохраняются по какой-то причине - что я не смог определить почему.Может кто-нибудь помочь, пожалуйста?
private void dgvItemsTable_CellValueChanged ( object sender, DataGridViewCellEventArgs e )
{
if ( dgvItemsTable.Columns[e.ColumnIndex].Name == soldColumn &&
(bool)dgvItemsTable.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == true )
{
formSoldItemPopup.FillComboBoxAutoComplete ( dataSetItems, expenseTypeColumn, true );
DialogResult dialogResult = formSoldItemPopup.ShowDialog ();
if ( dialogResult == DialogResult.OK )
{
dgvItemsTable.BeginEdit ( true );
dgvItemsTable.Rows[e.RowIndex].Cells[salesChannelIDColumn].Value = Int32.Parse ( salesChannelID );
dgvItemsTable.Rows[e.RowIndex].Cells[salePriceColumn].Value = formSoldItemPopup.SalePrice;
dgvItemsTable.Rows[e.RowIndex].Cells[saleDateColumn].Value = formSoldItemPopup.SaleDate;
dgvItemsTable.Rows[e.RowIndex].Cells[expensesColumn].Value = formSoldItemPopup.Expenses;
dgvItemsTable.Rows[e.RowIndex].Cells[expenseTypeColumn].Value = formSoldItemPopup.ExpenseType;
dgvItemsTable.Rows[e.RowIndex].SetValues ();
dgvItemsTable.EndEdit ();
UpdateItemsDatabase ();
}
}
}
private void dgvItemsTable_CurrentCellDirtyStateChanged ( object sender, EventArgs e )
{
if ( dgvItemsTable.IsCurrentCellDirty )
{
dgvItemsTable.CommitEdit ( DataGridViewDataErrorContexts.CurrentCellChange );
}
}
private void dgvItemsTable_CellEndEdit ( object sender, DataGridViewCellEventArgs e )
{
UpdateItemsDatabase ();
}
Я также пытался получить DataRow с привязкой к данным и обновить его, но изменения все еще не являются постоянными.
DataRow dataRow = ( (DataRowView)dgvItemsTable.SelectedRows[0].DataBoundItem ).Row;
dataRow.BeginEdit ();
dataRow[salesChannelIDColumn] = Int32.Parse ( salesChannelID );
dataRow[salePriceColumn] = formSoldItemPopup.SalePrice;
dataRow[saleDateColumn] = formSoldItemPopup.SaleDate;
dataRow[expensesColumn] = formSoldItemPopup.Expenses;
dataRow[expenseTypeColumn] = formSoldItemPopup.ExpenseType;
dataRow.EndEdit ();
dataRow.AcceptChanges ();
ОБНОВЛЕНИЕ
Итак, у меня был некоторый успех с приведенным ниже кодом - но ТОЛЬКО если я не включил две строки для всплывающей формы.Какой тип побеждает цель - мне нужны детали из формы, чтобы заполнить строку.: - (
У кого-нибудь есть идеи, почему форма препятствует успешному обновлению строки?
private void button1_Click ( object sender, EventArgs e )
{
currentColumnBeingEdited = dgvItemsTable.CurrentCell.ColumnIndex;
currentRowBeingEdited = dgvItemsTable.CurrentCell.RowIndex;
string salesChannelID =
dgvSelectedSalesChannel.Rows[dgvSelectedSalesChannel.Rows.Count - 1].Cells[salesChannelIDColumn].Value.ToString ();
formSoldItemPopup.FillComboBoxAutoComplete ( dataSetItems, expenseTypeColumn, true );
formSoldItemPopup.ShowDialog ();
dgvItemsTable.CurrentCell = dgvItemsTable.Rows[currentRowBeingEdited].Cells[soldColumn];
dgvItemsTable.Rows[currentRowBeingEdited].Cells[soldColumn].Value = true;
dgvItemsTable.BeginEdit ( false );
dgvItemsTable.EndEdit ();
dgvItemsTable.NotifyCurrentCellDirty ( true );
dgvItemsTable.CurrentCell = dgvItemsTable.Rows[currentRowBeingEdited].Cells[salesChannelIDColumn];
dgvItemsTable.Rows[currentRowBeingEdited].Cells[salesChannelIDColumn].Value = salesChannelID;
dgvItemsTable.BeginEdit ( false );
dgvItemsTable.EndEdit ();
dgvItemsTable.NotifyCurrentCellDirty ( true );
dgvItemsTable.CurrentCell = dgvItemsTable.Rows[currentRowBeingEdited].Cells[saleDateColumn];
dgvItemsTable.Rows[currentRowBeingEdited].Cells[saleDateColumn].Value = formSoldItemPopup.SaleDate;
dgvItemsTable.BeginEdit ( false );
dgvItemsTable.EndEdit ();
dgvItemsTable.NotifyCurrentCellDirty ( true );
dgvItemsTable.CurrentCell = dgvItemsTable.Rows[currentRowBeingEdited].Cells[salePriceColumn];
dgvItemsTable.Rows[currentRowBeingEdited].Cells[salePriceColumn].Value = formSoldItemPopup.SalePrice;
dgvItemsTable.BeginEdit ( false );
dgvItemsTable.EndEdit ();
dgvItemsTable.NotifyCurrentCellDirty ( true );
dgvItemsTable.CurrentCell = dgvItemsTable.Rows[currentRowBeingEdited].Cells[expensesColumn];
dgvItemsTable.Rows[currentRowBeingEdited].Cells[expensesColumn].Value = formSoldItemPopup.Expenses;
dgvItemsTable.BeginEdit ( false );
dgvItemsTable.EndEdit ();
dgvItemsTable.NotifyCurrentCellDirty ( true );
dgvItemsTable.CurrentCell = dgvItemsTable.Rows[currentRowBeingEdited].Cells[expenseTypeColumn];
dgvItemsTable.Rows[currentRowBeingEdited].Cells[expenseTypeColumn].Value = formSoldItemPopup.ExpenseType;
dgvItemsTable.BeginEdit ( false );
dgvItemsTable.EndEdit ();
dgvItemsTable.NotifyCurrentCellDirty ( true );
dgvItemsTable.CurrentCell = dgvItemsTable.Rows[currentRowBeingEdited + 1].Cells[itemIDColumn];
dgvItemsTable.CommitEdit ( DataGridViewDataErrorContexts.CurrentCellChange );
dgvItemsTable.EndEdit ();
UpdateItemsDatabase ();
}