DataGridView 不保存对单元格的编程更改

我在数据绑定的 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 ();

    }



慕娘9325324
浏览 152回答 1
1回答

拉风的咖菲猫

好的,我终于知道发生了什么事了。通过跟踪对 DataTable 的更改,我发现接受 DataRow 级别的更改会清除 DataTable 级别的更改。下面是完美运行的最终代码。     DataTable dataTableSold = dataSetItems.Tables["Table"];     DataRow[] dataRowSold = dataTableSold.Select ( "[" + itemIDColumn + "] = '" + itemID + "'" );     dgvItemsTable.BeginEdit ( false );     dataRowSold[0].BeginEdit ();     dataRowSold[0][salesChannelIDColumn] = salesChannelID;     dataRowSold[0][salePriceColumn] = formSoldItemPopup.SalePrice;     dataRowSold[0][saleDateColumn] = formSoldItemPopup.SaleDate;     dataRowSold[0][expensesColumn] = formSoldItemPopup.Expenses;     dataRowSold[0][expenseTypeColumn] = formSoldItemPopup.ExpenseType;     dataRowSold[0].EndEdit ();     dgvItemsTable.Update ();     UpdateItemsDatabase ();
打开App,查看更多内容
随时随地看视频慕课网APP