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); }
//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); } } }