public bool RemoveRow(IDataListItem itemToRemove, out int indexToSelect)
{
indexToSelect = 1;
var itemsRemoved = false;
if(itemToRemove != null && itemToRemove.IsRecordset)
{
// ReSharper disable InconsistentNaming
IEnumerable<IDataListItem> NumberOfRows = WorkflowInputs.Where(c => c.Recordset == itemToRemove.Recordset && c.Field == itemToRemove.Field);
// ReSharper restore InconsistentNaming
var numberOfRows = NumberOfRows.Count();
List<IDataListItem> listToRemove = WorkflowInputs.Where(c => c.RecordsetIndex == numberOfRows.ToString(CultureInfo.InvariantCulture) && c.Recordset == itemToRemove.Recordset).ToList();
if(numberOfRows == 2)
{
IEnumerable<IDataListItem> firstRow = WorkflowInputs.Where(c => c.RecordsetIndex == "1" && c.Recordset == itemToRemove.Recordset);
bool removeRow = firstRow.All(item => string.IsNullOrWhiteSpace(item.Value));
if(removeRow)
{
IEnumerable<IDataListItem> listToChange = WorkflowInputs.Where(c => c.RecordsetIndex == "2" && c.Recordset == itemToRemove.Recordset);
foreach(IDataListItem item in listToChange)
{
item.Value = string.Empty;
}
foreach(IDataListItem item in listToRemove)
{
WorkflowInputs.Remove(item);
// ReSharper disable once ConvertIfStatementToConditionalTernaryExpression
if(itemToRemove.RecordsetIndex == item.RecordsetIndex)
{
IDataListItem item1 = item;
indexToSelect = WorkflowInputs.IndexOf(WorkflowInputs.Last(c => c.Recordset == item1.Recordset));
}
else
{
indexToSelect = WorkflowInputs.IndexOf(itemToRemove);
}
itemsRemoved = true;
}
}
}
else if(numberOfRows > 2)
{
IEnumerable<IDataListItem> listToChange = WorkflowInputs.Where(c => c.RecordsetIndex == (numberOfRows - 1).ToString(CultureInfo.InvariantCulture) && c.Recordset == itemToRemove.Recordset);
foreach(IDataListItem item in listToChange)
{
item.Value = string.Empty;
}
foreach(IDataListItem item in listToRemove)
{
WorkflowInputs.Remove(item);
// ReSharper disable once ConvertIfStatementToConditionalTernaryExpression
if(itemToRemove.RecordsetIndex == item.RecordsetIndex)
{
IDataListItem item1 = item;
indexToSelect = WorkflowInputs.IndexOf(WorkflowInputs.Last(c => c.Recordset == item1.Recordset));
}
else
{
indexToSelect = WorkflowInputs.IndexOf(itemToRemove);
}
itemsRemoved = true;
}
}
}
return itemsRemoved;
}
protected const string RootTag = "DataList";