public static void ReadReplaceItems(ref RevitSheetData sheetData)
 {
     try
     {
         sheetData.ItemMaps.Clear();
         using (SQLiteCommand cmd = new SQLiteCommand(connection))
         {
             cmd.CommandText = "SELECT * FROM ReplaceItems";
             using (SQLiteDataReader reader = cmd.ExecuteReader())
             {
                 while (reader.Read())
                 {
                     RevitItemMapper item = new RevitItemMapper();
                     item.ItemId        = reader.GetGuid(reader.GetOrdinal("ReplaceItem_Id"));
                     item.ItemType      = (MappingType)Enum.Parse(typeof(MappingType), reader.GetString(reader.GetOrdinal("ReplaceItem_Type")));
                     item.ParameterName = reader.GetString(reader.GetOrdinal("ReplaceItem_Parameter"));
                     item.SourceValue   = reader.GetString(reader.GetOrdinal("ReplaceItem_Source_Value"));
                     item.TargetValue   = reader.GetString(reader.GetOrdinal("ReplaceItem_Target_Value"));
                     sheetData.ItemMaps.Add(item);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         string message = ex.Message;
     }
 }
        private void dataGridItem_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            try
            {
                DataGridRow row = e.Row;
                if (null != row)
                {
                    RevitItemMapper item         = row.Item as RevitItemMapper;
                    string          propertyName = e.Column.Header.ToString();

                    switch (propertyName)
                    {
                    case "Source Value":
                        TextBox sourceTextBox = e.EditingElement as TextBox;
                        if (null != sourceTextBox)
                        {
                            var itemFound = from itemMap in rvtSheetData.ItemMaps where itemMap.SourceValue == sourceTextBox.Text && itemMap.ItemType == item.ItemType && itemMap.ItemId != item.ItemId select item;
                            if (itemFound.Count() > 0)
                            {
                                MessageBoxResult msgResult = MessageBox.Show("[" + sourceTextBox.Text + "] Item already exists in the list. \nPlease enter a different value.", "Existing Value", MessageBoxButton.OK, MessageBoxImage.Information);
                                if (msgResult == MessageBoxResult.OK)
                                {
                                    e.Cancel = true;
                                }
                            }
                            else
                            {
                                item.SourceValue = sourceTextBox.Text;
                                bool dbUpdated = SheetDataWriter.ChangeReplaceItem(item, CommandType.UPDATE);
                            }
                        }
                        break;

                    case "Target Value":
                        TextBox targetTextBox = e.EditingElement as TextBox;
                        if (null != targetTextBox)
                        {
                            item.TargetValue = targetTextBox.Text;
                            bool dbUpdated = SheetDataWriter.ChangeReplaceItem(item, CommandType.UPDATE);
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
        }
        private void buttonAddItem_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (null != comboBoxType.SelectedItem && null != comboBoxParameter.SelectedItem)
                {
                    ItemMap itemMap   = comboBoxType.SelectedItem as ItemMap;
                    string  parameter = comboBoxParameter.SelectedItem.ToString();

                    if (null != itemMap && !string.IsNullOrEmpty(parameter))
                    {
                        string sampleSourceName = "";
                        double suffix           = 0;
                        if (dataGridItem.Items.Count > 0)
                        {
                            RevitItemMapper lastItem = dataGridItem.Items[dataGridItem.Items.Count - 1] as RevitItemMapper;
                            sampleSourceName = lastItem.SourceValue.ToString();

                            if (DataGridUtils.GetSuffix(sampleSourceName, out suffix))
                            {
                                sampleSourceName = sampleSourceName.Replace(suffix.ToString(), (suffix + 1).ToString());
                            }
                            else
                            {
                                sampleSourceName += " " + (suffix + 1).ToString();
                            }
                        }

                        if (string.IsNullOrEmpty(sampleSourceName))
                        {
                            sampleSourceName = "New Item 1";
                        }

                        RevitItemMapper itemMapper = new RevitItemMapper(Guid.NewGuid(), itemMap.ItemMapType, parameter, sampleSourceName, "");
                        this.RvtSheetData.ItemMaps.Add(itemMapper);
                        bool dbUpdated = SheetDataWriter.ChangeReplaceItem(itemMapper, CommandType.INSERT);
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
        }
        public static bool ChangeReplaceItem(RevitItemMapper item, CommandType cmdType)
        {
            bool result = false;

            try
            {
                if (null != connection && null != command)
                {
                    switch (cmdType)
                    {
                    case CommandType.INSERT:
                        command.CommandText = @"INSERT INTO ReplaceItems (ReplaceItem_Id, ReplaceItem_Type, ReplaceItem_Parameter, ReplaceItem_Source_Id, ReplaceItem_Source_Value, ReplaceItem_Target_Value) " +
                                              "VALUES ('" + item.ItemId.ToString() + "', '" + item.ItemType.ToString() + "', '" + item.ParameterName + "', '" + item.SourceId + "', '" + item.SourceValue + "', '" + item.TargetValue + "')";
                        if (command.ExecuteNonQuery() > 0)
                        {
                            result = true;
                        }
                        break;

                    case CommandType.UPDATE:
                        command.CommandText = "UPDATE ReplaceItems SET ReplaceItem_Source_Value = '" + item.SourceValue.ToString() + "', ReplaceItem_Target_Value = '" + item.TargetValue.ToString() + "'  WHERE ReplaceItem_Id = '" + item.ItemId.ToString() + "'";
                        if (command.ExecuteNonQuery() > 0)
                        {
                            result = true;
                        }
                        break;

                    case CommandType.DELETE:
                        command.CommandText = "DELETE FROM ReplaceItems WHERE ReplaceItem_Id = '" + item.ItemId.ToString() + "'";
                        if (command.ExecuteNonQuery() > 0)
                        {
                            result = true;
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(result);
        }
        private static bool IsNewItem(object item)
        {
            bool isNewItem = false;

            try
            {
                if (item.GetType() == typeof(RevitItemMapper))
                {
                    RevitItemMapper replaceItem = item as RevitItemMapper;
                    if (replaceItem.ItemId == Guid.Empty)
                    {
                        isNewItem = true;
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(isNewItem);
        }