public void Edit(int Index)
        {
            CHeaderData tmpHeaderData = lst_HeaderTemplates[Index];

            frmHeaderParametrs fHeaderParametrs = new frmHeaderParametrs();

            fHeaderParametrs.tspHeaderTemplate_txtNameTemplate.Text = tmpHeaderData.NameTemplate;

            CHeaderParams oHeaderParams = new CHeaderParams(ref fHeaderParametrs, ref tmpHeaderData);



            if (oHeaderParams.Edit() == DialogResult.OK)
            {
                tmpHeaderData.NameTemplate = fHeaderParametrs.tspHeaderTemplate_txtNameTemplate.Text;

                tHeader_Params ot = tHeader_Params.byINDEX(Index);

                ot.NameTemplate = tmpHeaderData.NameTemplate;

                ot.TemplateParametrs = SaveToDB(tmpHeaderData);

                ot.SaveAndFlush();
            }
        }
        public void Add()
        {
            frmHeaderParametrs fHeaderParametrs = new frmHeaderParametrs();



            CHeaderData tmpHeaderData = new CHeaderData();

            tmpHeaderData.NameTemplate = OriginalName();



            fHeaderParametrs.tspHeaderTemplate_txtNameTemplate.Text = tmpHeaderData.NameTemplate;


            CHeaderParams oHeaderParams = new CHeaderParams(ref fHeaderParametrs, ref tmpHeaderData);



            if (fHeaderParametrs.ShowDialog() == DialogResult.OK)
            {
                if (string.IsNullOrEmpty(fHeaderParametrs.tspHeaderTemplate_txtNameTemplate.Text))
                {
                    tmpHeaderData.NameTemplate = OriginalName();
                }
                else
                {
                    tmpHeaderData.NameTemplate = fHeaderParametrs.tspHeaderTemplate_txtNameTemplate.Text;
                }



                tHeader_Params otHeaderParams = new tHeader_Params();

                otHeaderParams.NameTemplate = tmpHeaderData.NameTemplate;

                otHeaderParams.TemplateParametrs = SaveToDB(tmpHeaderData);

                otHeaderParams.SaveAndFlush();

                lst_HeaderTemplates.Add(tmpHeaderData);
            }
        }
        private void tspHeaderParams_AddParam_Click(object sender, EventArgs e)
        {
            //Анонимный метод потому что кроме как в этой функции нигде больше использоваться не будет
            Action <CHeaderData> Add_Header = (HeaderData) =>

            {
                CHeaderParams oHeaderParams = new CHeaderParams(ref HeaderData);

                oHeaderParams.Add(fHeader_Template.tspHeaderParams_NameParam.Text);

                tHeader_Params otHeaderParams = new tHeader_Params();

                otHeaderParams.NameTemplate = HeaderData.NameTemplate;

                otHeaderParams.TemplateParametrs = SaveToDB(HeaderData);

                otHeaderParams.SaveAndFlush();

                lst_HeaderTemplates.Add(HeaderData);

                Update_CMB(fHeader_Template.tspHeaderParams_cmbHedearsNames);

                for (int i = 0; i < fHeader_Template.tspHeaderParams_cmbHedearsNames.Items.Count; i++)
                {
                    if (HeaderData.NameTemplate == fHeader_Template.tspHeaderParams_cmbHedearsNames.Items[i].ToString())
                    {
                        fHeader_Template.tspHeaderParams_cmbHedearsNames.SelectedIndex = i;
                    }
                }
            };


            Action <CHeaderData> Add_Parametr = (HeaderData) =>
            {
                CHeaderParams oHeaderParams = new CHeaderParams(ref HeaderData);

                oHeaderParams.Add(fHeader_Template.tspHeaderParams_NameParam.Text);

                Paint(HeaderData.lst_Parametrs[HeaderData.lst_Parametrs.Count - 1]);
            };



            if (fHeader_Template.tspHeaderParams_cmbHedearsNames.SelectedIndex < 0)
            {
                /*Редкий на первый взгляд но все же возможный сценарий
                 *
                 * Запрос состоит из трех составляющих:
                 *       1. Серверная часть запроса tServers
                 *       2. Заглавие запроса tHeader_Params
                 *       3. Тело запроса (tScenarioTemplate и tPluginTemplate в зависимости от сценария)
                 *
                 * Что б упростить комбинаторику была создана отдельная сущность которая в себе хранит данные
                 * заглавия и серверной части tHeaderTemplate
                 *
                 * tHeaderTemplate = tServers + tHeader_Params
                 *
                 *           tServers = tHeaderTemplate.ServerLine + FileForExtension (файл сертификата)
                 *
                 *           tHeader_Params = tHeaderTemplate.HeaderLine
                 *
                 *
                 * tHeaderTemplate – отдельная сущность которая полностью автономна. Она никак не связана tHeader_Params и tServers
                 *
                 *
                 * При очень редких условиях если запись будет удалена из tServers и/или tHeader_Params
                 * это никак не отразиться tHeaderTemplate.ServerLine и/или tHeaderTemplate.HeaderLine
                 *
                 * И вот он наступает редкий случай
                 *
                 * Если нет шаблона в tServers БД и/или tHeader_Params в форму frmHeaderTemplate загружаются сохраненные данные из
                 * tHeaderTemplate (включая файл сертификата, который хранится в поле tHeaderTemplate.FileForExtension)
                 *
                 *
                 * И этот шаблон можно редактировать и даже сохранить в tHeaderTemplate. Для этого используется закрытая переменная !fromDB!.
                 * В случае если шаблон который находится в справочнике tHeader_Params актуален она равна null в других случаях
                 * она содержит элемент сохраненный tHeaderTemplate.HeaderLine*/


                if (fromDB != null)
                {
                    if (fHeader_Template.tspHeaderParams_cmbHedearsNames.Text == fromDB.NameTemplate)
                    {
                        _HeaderData = new CHeaderData();

                        _HeaderData.NameTemplate = fromDB.NameTemplate;

                        _HeaderData.lst_Parametrs.AddRange(fromDB.lst_Parametrs);

                        Add_Parametr(_HeaderData);

                        return;
                    }
                }


                //Если ТЕКСТ списка "tspHeaderParams_cmbHedearsNames" пуст – будет создан новый элемент CHeaderTemplate
                //с уникальным именем и к нему будет добавлен ПАРАМЕТР имя которого будет соответсвовать tspHeaderParams_NameParam.Text.
                //Cозданный элемент CHeaderTemplate будет добавлен и сохранен в БД автоматически
                if (string.IsNullOrEmpty(fHeader_Template.tspHeaderParams_cmbHedearsNames.Text))
                {
                    CHeaderData tmpHeaderData = new CHeaderData();

                    tmpHeaderData.NameTemplate = OriginalName();

                    Add_Header(tmpHeaderData);
                }



                //Если текст списка "tspHeaderParams_cmbHedearsNames" не пуст – будет создан новый элемент CHeaderTemplate
                //с именем введенным в поле tspHeaderParams_cmbHedearsNames и к нему будет добавлен ПАРАМЕТР имя которого будет соответсвовать tspHeaderParams_NameParam.Text.
                //Cозданный элемент CHeaderTemplate будет добавлен и сохранен в БД автоматически
                else if (!string.IsNullOrEmpty(fHeader_Template.tspHeaderParams_cmbHedearsNames.Text))
                {
                    if (Dublicate_Name(fHeader_Template.tspHeaderParams_cmbHedearsNames.Text))
                    {
                        for (int i = 0; i < fHeader_Template.tspHeaderParams_cmbHedearsNames.Items.Count; i++)
                        {
                            if (fHeader_Template.tspHeaderParams_cmbHedearsNames.Text == fHeader_Template.tspHeaderParams_cmbHedearsNames.Items[i].ToString())
                            {
                                fHeader_Template.tspHeaderParams_cmbHedearsNames.SelectedIndex = i;

                                Add_Parametr(_HeaderData);

                                return;
                            }
                        }
                    }



                    CHeaderData tmpHeaderData = new CHeaderData();

                    tmpHeaderData.NameTemplate = fHeader_Template.tspHeaderParams_cmbHedearsNames.Text;

                    Add_Header(tmpHeaderData);
                }
            }


            //Если выбран элемент из БД шаблонов списка "tspHeaderParams_cmbHedearsNames" – будет добавлен новый ПАРАМЕТР,
            //имя которого будет соответсвовать tspHeaderParams_NameParam.Text в элемент CHeaderTemplate.
            //Обновленный элемент отрисуется на форме, но внесенные изменения будут сохранены только при нажатии клавиши
            // tspHeaderParams_Save
            else
            {
                CHeaderData tmpHeaderData =
                    lst_HeaderTemplates[fHeader_Template.tspHeaderParams_cmbHedearsNames.SelectedIndex];


                Add_Parametr(tmpHeaderData);
            }

            fHeader_Template.tspHeaderParams_NameParam.Text = string.Empty;
        }