private bool AddBlankRowToRecordset(IDataListItem dlItem, IList <Dev2Column> columns, int indexToInsertAt, int indexNum) { bool itemsAdded = false; if (dlItem.IsRecordset) { IList <Dev2Column> recsetCols = columns; foreach (Dev2Column col in recsetCols) { WorkflowInputs.Insert(indexToInsertAt + 1, new DataListItem { DisplayValue = string.Concat(dlItem.Recordset, "(", indexNum, ").", col.ColumnName), Value = string.Empty, IsRecordset = dlItem.IsRecordset, Recordset = dlItem.Recordset, Field = col.ColumnName, Description = col.ColumnDescription, RecordsetIndex = indexNum.ToString(CultureInfo.InvariantCulture) }); itemsAdded = true; indexToInsertAt++; } } return(itemsAdded); }
public bool AddBlankRow(IDataListItem selectedItem, out int indexToSelect) { indexToSelect = 1; var itemsAdded = false; if (selectedItem != null && selectedItem.CanHaveMutipleRows) { var recordset = DataList.RecordSets.FirstOrDefault(set => set.Name == selectedItem.Recordset); if (recordset != null) { var recsetCols = new List <IScalar>(); foreach (var column in recordset.Columns) { recsetCols.AddRange(column.Value); } var numberOfRows = WorkflowInputs.Where(c => c.Recordset == selectedItem.Recordset); var lastItem = numberOfRows.Last(); var indexToInsertAt = WorkflowInputs.IndexOf(lastItem); var indexString = lastItem.Index; var indexNum = Convert.ToInt32(indexString) + 1; indexToSelect = indexToInsertAt + 1; itemsAdded = AddBlankRowToRecordset(selectedItem, recsetCols, indexToInsertAt, indexNum); } } return(itemsAdded); }
/// <summary> /// Used for intelligently determining if a extra row should be added for the selected recordset /// </summary> /// <param name="itemToAdd">The item that is currently selected</param> public void AddRow(IDataListItem itemToAdd) { if (itemToAdd != null && itemToAdd.IsRecordset) { string error; IBinaryDataListEntry recordset; DataList.TryGetEntry(itemToAdd.Recordset, out recordset, out error); if (recordset != null) { IList <Dev2Column> recsetCols = recordset.Columns.Where(cc => cc.ColumnIODirection == enDev2ColumnArgumentDirection.Input || cc.ColumnIODirection == enDev2ColumnArgumentDirection.Both).ToList(); var numberOfRows = WorkflowInputs.Where(c => c.Recordset == itemToAdd.Recordset); IEnumerable <IDataListItem> dataListItems = numberOfRows as IDataListItem[] ?? numberOfRows.ToArray(); var lastItem = dataListItems.Last(); var indexToInsertAt = WorkflowInputs.IndexOf(lastItem); var indexString = lastItem.RecordsetIndex; var indexNum = Convert.ToInt32(indexString) + 1; var lastRow = dataListItems.Where(c => c.RecordsetIndex == indexString); var dontAddRow = true; foreach (var item in lastRow) { if (item.Value != string.Empty) { dontAddRow = false; } } if (!dontAddRow) { AddBlankRowToRecordset(itemToAdd, recsetCols, indexToInsertAt, indexNum); } } } }
bool AddBlankRowToRecordset(IDataListItem dlItem, IList <IScalar> columns, int indexToInsertAt, int indexNum) { var itemsAdded = false; if (dlItem.CanHaveMutipleRows) { IList <IScalar> recsetCols = columns.Distinct(Scalar.Comparer).ToList(); string colName = null; foreach (var col in recsetCols.Distinct(new ScalarNameComparer())) { if (string.IsNullOrEmpty(colName) || !colName.Equals(col.Name)) { WorkflowInputs.Insert(indexToInsertAt + 1, new DataListItem { DisplayValue = string.Concat(dlItem.Recordset, @"(", indexNum, @").", col.Name), Value = string.Empty, CanHaveMutipleRows = dlItem.CanHaveMutipleRows, Recordset = dlItem.Recordset, Field = col.Name, Description = col.Description, Index = indexNum.ToString(CultureInfo.InvariantCulture) }); indexToInsertAt++; } colName = col.Name; itemsAdded = true; } } return(itemsAdded); }
void AddRow(IDataListItem itemToAdd, IRecordSet recordset) { var recsetCols = new List <IScalar>(); foreach (var column in recordset.Columns) { var cols = column.Value.Where(scalar => scalar.IODirection == enDev2ColumnArgumentDirection.Input || scalar.IODirection == enDev2ColumnArgumentDirection.Both); recsetCols.AddRange(cols); } var numberOfRows = WorkflowInputs.Where(c => c.Recordset == itemToAdd.Recordset); IEnumerable <IDataListItem> dataListItems = numberOfRows as IDataListItem[] ?? numberOfRows.ToArray(); var lastItem = dataListItems.Last(); var indexToInsertAt = WorkflowInputs.IndexOf(lastItem); var indexString = lastItem.Index; var indexNum = Convert.ToInt32(indexString) + 1; var lastRow = dataListItems.Where(c => c.Index == indexString); var addRow = false; foreach (var item in lastRow) { if (item.Value != string.Empty) { addRow = true; } } if (addRow) { AddBlankRowToRecordset(itemToAdd, recsetCols, indexToInsertAt, indexNum); } }
int UpdateIndexToSelect(IDataListItem itemToRemove, IDataListItem item) { if (itemToRemove.Index == item.Index) { var item1 = item; return(WorkflowInputs.IndexOf(WorkflowInputs.Last(c => c.Recordset == item1.Recordset))); } return(WorkflowInputs.IndexOf(itemToRemove)); }
public void AddRow(IDataListItem itemToAdd) { if (itemToAdd != null && itemToAdd.CanHaveMutipleRows) { var recordset = DataList.ShapeRecordSets.FirstOrDefault(set => set.Name == itemToAdd.Recordset); if (recordset != null) { AddRow(itemToAdd, recordset); } } }
/// <summary> /// Used for removing a row for the collection /// </summary> /// <param name="itemToRemove">The item that will be removed from the collection</param> /// <param name="indexToSelect"></param> public bool RemoveRow(IDataListItem itemToRemove, out int indexToSelect) { indexToSelect = 1; var itemsRemoved = false; if (itemToRemove != null && itemToRemove.CanHaveMutipleRows) { var numberOfRows = WorkflowInputs.Count(c => c.Recordset == itemToRemove.Recordset && c.Field == itemToRemove.Field); List <IDataListItem> listToRemove = WorkflowInputs.Where(c => c.Index == numberOfRows.ToString(CultureInfo.InvariantCulture) && c.Recordset == itemToRemove.Recordset).ToList(); if (numberOfRows == 2) { IEnumerable <IDataListItem> firstRow = WorkflowInputs.Where(c => c.Index == @"1" && c.Recordset == itemToRemove.Recordset); bool removeRow = firstRow.All(item => string.IsNullOrWhiteSpace(item.Value)); if (removeRow) { IEnumerable <IDataListItem> listToChange = WorkflowInputs.Where(c => c.Index == @"2" && c.Recordset == itemToRemove.Recordset); foreach (IDataListItem item in listToChange) { item.Value = string.Empty; } foreach (IDataListItem item in listToRemove) { WorkflowInputs.Remove(item); indexToSelect = UpdateIndexToSelect(itemToRemove, item); itemsRemoved = true; } } } else if (numberOfRows > 2) { IEnumerable <IDataListItem> listToChange = WorkflowInputs.Where(c => c.Index == (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); indexToSelect = UpdateIndexToSelect(itemToRemove, item); itemsRemoved = true; } } } return(itemsRemoved); }
public IDataListItem GetPreviousRow(IDataListItem selectedItem) { if (selectedItem != null) { var indexToInsertAt = WorkflowInputs.IndexOf(selectedItem); if (indexToInsertAt != -1) { var indexOfItemToGet = indexToInsertAt - 1; if (indexOfItemToGet == WorkflowInputs.Count || indexOfItemToGet == -1) { return(selectedItem); } return(WorkflowInputs[indexOfItemToGet]); } } return(null); }
void RemoveRows(IDataListItem itemToRemove, ref int indexToSelect, ref bool itemsRemoved, List <IDataListItem> listToRemove, int numberOfRows) { if (numberOfRows > 2) { var listToChange = WorkflowInputs.Where(c => c.Index == (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); indexToSelect = UpdateIndexToSelect(itemToRemove, item); itemsRemoved = true; } } }
private void AddObjectToObject(JObject dataListObject, IDataListItem o) { var json = string.Empty; if (DataListSingleton.ActiveDataList != null) { if (DataListSingleton.ActiveDataList.ComplexObjectCollection != null) { var complexObjectItemModel = DataListSingleton.ActiveDataList.ComplexObjectCollection.SingleOrDefault(model => model.Name == o.DisplayValue); if (complexObjectItemModel != null) { json = complexObjectItemModel.GetJson(); } } AddToDataListObject(dataListObject, o, json); } }
void AddToDataListObject(JObject dataListObject, IDataListItem o, string json) { try { var objValue = string.IsNullOrEmpty(o.Value) ? json : o.Value; var value = JsonConvert.DeserializeObject(objValue) as JObject; var prop = value?.Properties().FirstOrDefault(property => property.Name == o.Field); if (prop != null) { value = prop.Value as JObject; } dataListObject.Add(o.Field, value); } catch (Exception) { ShowInvalidDataPopupMessage(); } }
private static void DoScalarAppending(StringBuilder result, IDataListItem val) { var fName = val.Field; result.Append("<"); result.Append(fName); result.Append(">"); try { result.Append(val.Value); } // ReSharper disable EmptyGeneralCatchClause catch (Exception) // ReSharper restore EmptyGeneralCatchClause { } result.Append("</"); result.Append(fName); result.Append(">"); }
public bool RemoveRow(IDataListItem itemToRemove, out int indexToSelect) { indexToSelect = 1; var itemsRemoved = false; if (itemToRemove != null && itemToRemove.CanHaveMutipleRows) { var numberOfRows = WorkflowInputs.Count(c => c.Recordset == itemToRemove.Recordset && c.Field == itemToRemove.Field); var listToRemove = WorkflowInputs.Where(c => c.Index == numberOfRows.ToString(CultureInfo.InvariantCulture) && c.Recordset == itemToRemove.Recordset).ToList(); if (numberOfRows == 2) { RemoveRow(itemToRemove, ref indexToSelect, ref itemsRemoved, listToRemove); } else { RemoveRows(itemToRemove, ref indexToSelect, ref itemsRemoved, listToRemove, numberOfRows); } } return(itemsRemoved); }
void RemoveRow(IDataListItem itemToRemove, ref int indexToSelect, ref bool itemsRemoved, List <IDataListItem> listToRemove) { var firstRow = WorkflowInputs.Where(c => c.Index == @"1" && c.Recordset == itemToRemove.Recordset); var removeRow = firstRow.All(item => string.IsNullOrWhiteSpace(item.Value)); if (removeRow) { var listToChange = WorkflowInputs.Where(c => c.Index == @"2" && c.Recordset == itemToRemove.Recordset); foreach (IDataListItem item in listToChange) { item.Value = string.Empty; } foreach (IDataListItem item in listToRemove) { WorkflowInputs.Remove(item); indexToSelect = UpdateIndexToSelect(itemToRemove, item); itemsRemoved = true; } } }
/// <summary> /// Used for just adding a blank row to a recordset /// </summary> /// <param name="selectedItem">The item that is currently selected</param> /// <param name="indexToSelect"></param> public bool AddBlankRow(IDataListItem selectedItem, out int indexToSelect) { indexToSelect = 1; bool itemsAdded = false; if (selectedItem != null && selectedItem.IsRecordset) { string error; IBinaryDataListEntry recordset; DataList.TryGetEntry(selectedItem.Recordset, out recordset, out error); if (recordset != null) { IList <Dev2Column> recsetCols = recordset.Columns; IEnumerable <IDataListItem> numberOfRows = WorkflowInputs.Where(c => c.Recordset == selectedItem.Recordset); IDataListItem lastItem = numberOfRows.Last(); int indexToInsertAt = WorkflowInputs.IndexOf(lastItem); string indexString = lastItem.RecordsetIndex; int indexNum = Convert.ToInt32(indexString) + 1; indexToSelect = indexToInsertAt + 1; itemsAdded = AddBlankRowToRecordset(selectedItem, recsetCols, indexToInsertAt, indexNum); } } return(itemsAdded); }
/// <summary> /// Used for removing a row for the collection /// </summary> /// <param name="itemToRemove">The item that will be removed from the collection</param> /// <param name="indexToSelect"></param> 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; }
/// <summary> /// Used for intelligently determining if a extra row should be added for the selected recordset /// </summary> /// <param name="itemToAdd">The item that is currently selected</param> public void AddRow(IDataListItem itemToAdd) { if(itemToAdd != null && itemToAdd.IsRecordset) { IRecordSet recordset = DataList.ShapeRecordSets.FirstOrDefault(set => set.Name == itemToAdd.Recordset); if(recordset != null) { var recsetCols = new List<IScalar>(); foreach (var column in recordset.Columns) { var cols = column.Value.Where(scalar => scalar.IODirection == enDev2ColumnArgumentDirection.Input || scalar.IODirection == enDev2ColumnArgumentDirection.Both); recsetCols.AddRange(cols); } var numberOfRows = WorkflowInputs.Where(c => c.Recordset == itemToAdd.Recordset); IEnumerable<IDataListItem> dataListItems = numberOfRows as IDataListItem[] ?? numberOfRows.ToArray(); var lastItem = dataListItems.Last(); var indexToInsertAt = WorkflowInputs.IndexOf(lastItem); var indexString = lastItem.RecordsetIndex; var indexNum = Convert.ToInt32(indexString) + 1; var lastRow = dataListItems.Where(c => c.RecordsetIndex == indexString); var dontAddRow = true; foreach(var item in lastRow) { if(item.Value != string.Empty) { dontAddRow = false; } } if(!dontAddRow) { AddBlankRowToRecordset(itemToAdd, recsetCols, indexToInsertAt, indexNum); } } } }
private bool AddBlankRowToRecordset(IDataListItem dlItem, IList<Dev2Column> columns, int indexToInsertAt, int indexNum) { bool itemsAdded = false; if(dlItem.IsRecordset) { IList<Dev2Column> recsetCols = columns; foreach(Dev2Column col in recsetCols) { WorkflowInputs.Insert(indexToInsertAt + 1, new DataListItem { DisplayValue = string.Concat(dlItem.Recordset, "(", indexNum, ").", col.ColumnName), Value = string.Empty, IsRecordset = dlItem.IsRecordset, Recordset = dlItem.Recordset, Field = col.ColumnName, Description = col.ColumnDescription, RecordsetIndex = indexNum.ToString(CultureInfo.InvariantCulture) }); itemsAdded = true; indexToInsertAt++; } } return itemsAdded; }
public DataListEntry(IDataListItem selectedItem, string selectedText) { SelectedItem = selectedItem; SelectedText = selectedText; }
/// <summary> /// Used for removing a row for the collection /// </summary> /// <param name="itemToRemove">The item that will be removed from the collection</param> /// <param name="indexToSelect"></param> 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); }
public void SelectedDataListItemChanged(IDataListItem item) { SelectedCharacterModel = item == null ? null : (CharacterModel)item; }
/// <summary> /// Used for just adding a blank row to a recordset /// </summary> /// <param name="selectedItem">The item that is currently selected</param> /// <param name="indexToSelect"></param> public bool AddBlankRow(IDataListItem selectedItem, out int indexToSelect) { indexToSelect = 1; bool itemsAdded = false; if(selectedItem != null && selectedItem.IsRecordset) { var recordset = DataList.RecordSets.FirstOrDefault(set => set.Name == selectedItem.Recordset); if(recordset != null) { var recsetCols = new List<IScalar>(); foreach(var column in recordset.Columns) { recsetCols.AddRange(column.Value); } IEnumerable<IDataListItem> numberOfRows = WorkflowInputs.Where(c => c.Recordset == selectedItem.Recordset); IDataListItem lastItem = numberOfRows.Last(); int indexToInsertAt = WorkflowInputs.IndexOf(lastItem); string indexString = lastItem.RecordsetIndex; int indexNum = Convert.ToInt32(indexString) + 1; indexToSelect = indexToInsertAt + 1; itemsAdded = AddBlankRowToRecordset(selectedItem, recsetCols, indexToInsertAt, indexNum); } } return itemsAdded; }
/// <summary> /// Used for just adding a blank row to a recordset /// </summary> /// <param name="selectedItem">The item that is currently selected</param> /// <param name="indexToSelect"></param> public bool AddBlankRow(IDataListItem selectedItem, out int indexToSelect) { indexToSelect = 1; bool itemsAdded = false; if(selectedItem != null && selectedItem.IsRecordset) { string error; IBinaryDataListEntry recordset; DataList.TryGetEntry(selectedItem.Recordset, out recordset, out error); if(recordset != null) { IList<Dev2Column> recsetCols = recordset.Columns; IEnumerable<IDataListItem> numberOfRows = WorkflowInputs.Where(c => c.Recordset == selectedItem.Recordset); IDataListItem lastItem = numberOfRows.Last(); int indexToInsertAt = WorkflowInputs.IndexOf(lastItem); string indexString = lastItem.RecordsetIndex; int indexNum = Convert.ToInt32(indexString) + 1; indexToSelect = indexToInsertAt + 1; itemsAdded = AddBlankRowToRecordset(selectedItem, recsetCols, indexToInsertAt, indexNum); } } return itemsAdded; }
private bool AddBlankRowToRecordset(IDataListItem dlItem, IList<IScalar> columns, int indexToInsertAt, int indexNum) { bool itemsAdded = false; if(dlItem.IsRecordset) { IList<IScalar> recsetCols = columns.Distinct(Scalar.Comparer).ToList(); string colName = null; foreach(var col in recsetCols) { if(string.IsNullOrEmpty(colName) || !colName.Equals(col.Name)) { WorkflowInputs.Insert(indexToInsertAt + 1, new DataListItem { DisplayValue = string.Concat(dlItem.Recordset, "(", indexNum, ").", col.Name), Value = string.Empty, IsRecordset = dlItem.IsRecordset, Recordset = dlItem.Recordset, Field = col.Name, Description = col.Description, RecordsetIndex = indexNum.ToString(CultureInfo.InvariantCulture) }); indexToInsertAt++; } colName = col.Name; itemsAdded = true; } } return itemsAdded; }
/// <summary> /// Used for intelligently determining if a extra row should be added for the selected recordset /// </summary> /// <param name="itemToAdd">The item that is currently selected</param> public void AddRow(IDataListItem itemToAdd) { if(itemToAdd != null && itemToAdd.IsRecordset) { string error; IBinaryDataListEntry recordset; DataList.TryGetEntry(itemToAdd.Recordset, out recordset, out error); if(recordset != null) { IList<Dev2Column> recsetCols = recordset.Columns.Where(cc => cc.ColumnIODirection == enDev2ColumnArgumentDirection.Input || cc.ColumnIODirection == enDev2ColumnArgumentDirection.Both).ToList(); var numberOfRows = WorkflowInputs.Where(c => c.Recordset == itemToAdd.Recordset); IEnumerable<IDataListItem> dataListItems = numberOfRows as IDataListItem[] ?? numberOfRows.ToArray(); var lastItem = dataListItems.Last(); var indexToInsertAt = WorkflowInputs.IndexOf(lastItem); var indexString = lastItem.RecordsetIndex; var indexNum = Convert.ToInt32(indexString) + 1; var lastRow = dataListItems.Where(c => c.RecordsetIndex == indexString); var dontAddRow = true; foreach(var item in lastRow) { if(item.Value != string.Empty) { dontAddRow = false; } } if(!dontAddRow) { AddBlankRowToRecordset(itemToAdd, recsetCols, indexToInsertAt, indexNum); } } } }