Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ SetDataRowWithLoadOption()

void System.Data.DataTable.SetDataRowWithLoadOption ( DataRow dataRow,
int recordNo,
LoadOption loadOption,
bool checkReadOnly )
inlineprivateinherited

Definition at line 4492 of file DataTable.cs.

4493 {
4494 bool flag = false;
4495 if (checkReadOnly)
4496 {
4497 foreach (DataColumn column in Columns)
4498 {
4499 if (!column.ReadOnly || column.Computed)
4500 {
4501 continue;
4502 }
4503 switch (loadOption)
4504 {
4505 case LoadOption.OverwriteChanges:
4507 {
4508 flag = true;
4509 }
4510 break;
4511 case LoadOption.Upsert:
4512 if (dataRow[column, DataRowVersion.Current] != column[recordNo])
4513 {
4514 flag = true;
4515 }
4516 break;
4517 case LoadOption.PreserveChanges:
4518 if (dataRow[column, DataRowVersion.Original] != column[recordNo])
4519 {
4520 flag = true;
4521 }
4522 break;
4523 }
4524 }
4525 }
4526 DataRowChangeEventArgs args = null;
4527 DataRowAction dataRowAction = DataRowAction.Nothing;
4528 int record = dataRow._tempRecord;
4530 switch (loadOption)
4531 {
4532 case LoadOption.OverwriteChanges:
4533 dataRowAction = DataRowAction.ChangeCurrentAndOriginal;
4534 break;
4535 case LoadOption.Upsert:
4536 switch (dataRow.RowState)
4537 {
4538 case DataRowState.Unchanged:
4539 foreach (DataColumn column2 in dataRow.Table.Columns)
4540 {
4541 if (column2.Compare(dataRow._newRecord, recordNo) != 0)
4542 {
4543 dataRowAction = DataRowAction.Change;
4544 break;
4545 }
4546 }
4547 break;
4548 default:
4549 dataRowAction = DataRowAction.Change;
4550 break;
4551 case DataRowState.Deleted:
4552 break;
4553 }
4554 break;
4555 case LoadOption.PreserveChanges:
4556 {
4557 DataRowState rowState = dataRow.RowState;
4558 DataRowAction dataRowAction2 = ((rowState != DataRowState.Unchanged) ? DataRowAction.ChangeOriginal : DataRowAction.ChangeCurrentAndOriginal);
4560 break;
4561 }
4562 default:
4563 throw ExceptionBuilder.ArgumentOutOfRange("LoadOption");
4564 }
4565 try
4566 {
4568 if (dataRowAction == DataRowAction.Nothing)
4569 {
4571 try
4572 {
4574 }
4575 finally
4576 {
4578 }
4579 }
4580 }
4581 finally
4582 {
4583 if (DataRowState.Detached == dataRow.RowState)
4584 {
4585 if (-1 != record)
4586 {
4588 }
4589 }
4590 else if (dataRow._tempRecord != recordNo)
4591 {
4592 if (-1 != record)
4593 {
4595 }
4596 if (-1 != recordNo)
4597 {
4599 }
4600 recordNo = dataRow._tempRecord;
4601 }
4602 else
4603 {
4605 }
4606 }
4607 if (dataRow._tempRecord != -1)
4608 {
4609 dataRow.CancelEdit();
4610 }
4611 switch (loadOption)
4612 {
4613 case LoadOption.OverwriteChanges:
4614 SetNewRecord(dataRow, recordNo, DataRowAction.Change, isInMerge: false, fireEvent: false);
4616 break;
4617 case LoadOption.Upsert:
4618 if (dataRow.RowState == DataRowState.Unchanged)
4619 {
4620 SetNewRecord(dataRow, recordNo, DataRowAction.Change, isInMerge: false, fireEvent: false);
4621 if (!dataRow.HasChanges())
4622 {
4624 }
4625 }
4626 else
4627 {
4628 if (dataRow.RowState == DataRowState.Deleted)
4629 {
4630 dataRow.RejectChanges();
4631 }
4632 SetNewRecord(dataRow, recordNo, DataRowAction.Change, isInMerge: false, fireEvent: false);
4633 }
4634 break;
4635 case LoadOption.PreserveChanges:
4636 if (dataRow.RowState == DataRowState.Unchanged)
4637 {
4639 SetNewRecord(dataRow, recordNo, DataRowAction.Change, isInMerge: false, fireEvent: false);
4640 }
4641 else
4642 {
4644 }
4645 break;
4646 default:
4647 throw ExceptionBuilder.ArgumentOutOfRange("LoadOption");
4648 }
4649 if (flag)
4650 {
4652 if (dataRow.RowError.Length == 0)
4653 {
4655 }
4656 else
4657 {
4659 }
4660 foreach (DataColumn column3 in Columns)
4661 {
4662 if (column3.ReadOnly && !column3.Computed)
4663 {
4664 dataRow.SetColumnError(column3, load_ReadOnlyDataModified);
4665 }
4666 }
4667 }
4669 if (dataRowAction == DataRowAction.Nothing)
4670 {
4672 try
4673 {
4675 }
4676 finally
4677 {
4679 }
4680 }
4681 }
DataRowChangeEventArgs OnRowChanged(DataRowChangeEventArgs args, DataRow eRow, DataRowAction eAction)
void FreeRecord(ref int record)
DataColumnCollection Columns
Definition DataTable.cs:327
void SetOldRecord(DataRow row, int proposedRecord)
DataRowChangeEventArgs OnRowChanging(DataRowChangeEventArgs args, DataRow eRow, DataRowAction eAction)
DataRowChangeEventArgs RaiseRowChanging(DataRowChangeEventArgs args, DataRow eRow, DataRowAction eAction)
void SetNewRecord(DataRow row, int proposedRecord, DataRowAction action=DataRowAction.Change, bool isInMerge=false, bool fireEvent=true, bool suppressEnsurePropertyChanged=false)
DataRowChangeEventArgs RaiseRowChanged(DataRowChangeEventArgs args, DataRow eRow, DataRowAction eAction)
static string Load_ReadOnlyDataModified
Definition SR.cs:662
Definition SR.cs:7

References System.Data.ExceptionBuilder.ArgumentOutOfRange(), System.Data.DataTable.Columns, System.Runtime.Serialization.Dictionary, System.Data.DataTable.FreeRecord(), System.SR.Load_ReadOnlyDataModified, System.Data.DataTable.OnRowChanged(), System.Data.DataTable.OnRowChanging(), System.Data.DataTable.RaiseRowChanged(), System.Data.DataTable.RaiseRowChanging(), System.Data.DataTable.SetNewRecord(), and System.Data.DataTable.SetOldRecord().

Referenced by System.Data.DataTable.LoadRow().