コード例 #1
0
ファイル: Concorrencia.cs プロジェクト: aureliopires/gisa
		private void changeRowStateToModified(DataRow dataRow, changedRows changedRow, DataTable dt)
		{
			//verificar se é possivel forçar a mudança de estado (tabelas intermedias que so sejam compostas por chaves primarias não são permitidas edições)
			if (allowRowStateChanges(dt))
			{
				//forçar a mudança de estado para modified da linha marcada como added
				dataRow.AcceptChanges();
				bool isReadOnly = false;
				isReadOnly = dataRow.Table.Columns[0].ReadOnly;
				dataRow.Table.Columns[0].ReadOnly = false;
				dataRow[0] = dataRow[0];
				dataRow.Table.Columns[0].ReadOnly = isReadOnly;
				changedRow.rowsMod.Add(dataRow);
				RowsChangedToModified.Add(dataRow, dataRow);
			}
			else
			{
				dataRow.AcceptChanges();
			}

			//como a linha já existe na BD esta deve ser removida da lista das added
			changedRow.rowsAdd.Remove(dataRow);

		}
コード例 #2
0
ファイル: Concorrencia.cs プロジェクト: aureliopires/gisa
		//apaga / marca como apagada, as linhas descendentes daquela passada como argumento e remove-as da estrutura que mantem as linhas alteradas em memoria
		private void removeChildRows(DataRow dr, ArrayList changedrows)
		{
			changedRows el = new changedRows();
			ArrayList rows = new ArrayList();
			foreach (DataRelation rel in dr.Table.ChildRelations)
			{
				foreach (DataRow row in dr.GetChildRows(rel))
				{
					if (row.Table.ChildRelations.Count > 0)
						removeChildRows(row, changedrows);

					rows.Clear();
					//verificar se a row está no arraylist com as linhas alteradas
					if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Deleted || row.RowState == DataRowState.Modified)
					{
						el = getChangedRowsElement(changedrows, row.Table.TableName);
						el.rowsAdd.Remove(row);
						el.rowsMod.Remove(row);
						el.rowsDel.Remove(row);
					}
					row.Table.Rows.Remove(row);
				}
			}
		}