/// <summary> /// Creates a new row update and adds it to the update cache /// </summary> /// <exception cref="InvalidOperationException">If inserting into cache fails</exception> /// <returns>The internal ID of the newly created row</returns> public EditCreateRowResult CreateRow() { ThrowIfNotInitialized(); // Create a new row ID (atomically, since this could be accesses concurrently) long newRowId = NextRowId++; // Create a new row create update and add to the update cache RowCreate newRow = new RowCreate(newRowId, associatedResultSet, objectMetadata); if (!EditCache.TryAdd(newRowId, newRow)) { // Revert the next row ID NextRowId--; throw new InvalidOperationException(SR.EditDataFailedAddRow); } EditCreateRowResult output = new EditCreateRowResult { NewRowId = newRow.RowId, DefaultValues = newRow.DefaultValues }; return(output); }
/// <summary> /// Creates a new row update and adds it to the update cache /// </summary> /// <exception cref="InvalidOperationException">If inserting into cache fails</exception> /// <returns>The internal ID of the newly created row</returns> public EditCreateRowResult CreateRow() { ThrowIfNotInitialized(); // Create a new row ID (atomically, since this could be accesses concurrently) long newRowId = NextRowId++; // Create a new row create update and add to the update cache RowCreate newRow = new RowCreate(newRowId, associatedResultSet, objectMetadata); if (!EditCache.TryAdd(newRowId, newRow)) { // Revert the next row ID NextRowId--; throw new InvalidOperationException(SR.EditDataFailedAddRow); } // Set the default values of the row if we know them string[] defaultValues = new string[objectMetadata.Columns.Length]; for (int i = 0; i < objectMetadata.Columns.Length; i++) { EditColumnMetadata col = objectMetadata.Columns[i]; // If the column is calculated, return the calculated placeholder as the display value if (col.IsCalculated.HasTrue()) { defaultValues[i] = SR.EditDataComputedColumnPlaceholder; } else { if (col.DefaultValue != null) { newRow.SetCell(i, col.DefaultValue); } defaultValues[i] = col.DefaultValue; } } EditCreateRowResult output = new EditCreateRowResult { NewRowId = newRowId, DefaultValues = defaultValues }; return(output); }
/// <summary> /// Creates a delete row update and adds it to the update cache /// </summary> /// <exception cref="InvalidOperationException"> /// If row requested to delete already has a pending change in the cache /// </exception> /// <param name="rowId">The internal ID of the row to delete</param> public void DeleteRow(long rowId) { ThrowIfNotInitialized(); // Sanity check the row ID if (rowId >= NextRowId || rowId < 0) { throw new ArgumentOutOfRangeException(nameof(rowId), SR.EditDataRowOutOfRange); } // Create a new row delete update and add to cache RowDelete deleteRow = new RowDelete(rowId, associatedResultSet, objectMetadata); if (!EditCache.TryAdd(rowId, deleteRow)) { throw new InvalidOperationException(SR.EditDataUpdatePending); } }