/// <summary>
        /// Загрузить данные из файла для обучения сети.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_ChooseLearningFile_Click(object sender, EventArgs e)
        {
            try
            {
                using (var openFileDialog = new OpenFileDialog())
                {
                    openFileDialog.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm";
                    openFileDialog.InitialDirectory = CommonUtils.ResourcesDirectory;

                    if (openFileDialog.ShowDialog() == DialogResult.OK)
                    {
                        using (new CursorHandler())
                        {
                            var excelFilePath = Path.Combine(CommonUtils.ResourcesDirectory, openFileDialog.FileName);
                            tbLearningFile.Text = excelFilePath;

                            var learningDataTable = _reader.ReadFromFile(excelFilePath);

                            _learningDataSet = _converter.Convert(learningDataTable);
                            _neuralNetwork.InputAttributes = _learningDataSet.Attributes
                                .Select(a => new InputAttributeBase
                                {
                                    InputAttributeNumber = a.OrderNumber,
                                    Name = a.Name
                                })
                                .ToList();

                            _interfaceMediator.DrawDataIntoGrid(_learningDataSet.Entities, _neuralNetwork.InputAttributes, dgvInputLearningData);
							
							RecalcMinMaxValues(_learningDataSet);
							RecalcMinMaxValues(_testingDataSet);

							var normalizedData = _learningDataSet.Entities
                                .Select(l => new NetworkDataEntity()
                                {
                                    Name = l.Name,
                                    OrderNumber = l.OrderNumber,
                                    AttributeValues = l.AttributeValues.Select(a => new NetworkEntityAttributeValue
                                    {
                                        Attribute = a.Attribute,
                                        Value = a.GetNormalizedValue(_neuralNetwork.NormalizationType)
                                    }).ToList()
                                })
                                .ToList();
                            _interfaceMediator.DrawDataIntoGrid(normalizedData, _neuralNetwork.InputAttributes, dgvNormalizedLearningData);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public void ShouldConvertFromDataTable()
        {
            var reader        = new ExcelReader();
            var excelFileName = "Sample.xlsx";
            var excelFilePath = Path.Combine(CommonUtils.ResourcesDirectory, excelFileName);

            // Получаем DataTable, заодно проверяем работу провайдера данных из Excel
            var dataTable = reader.ReadFromFile(excelFilePath);

            Assert.IsNotNull(dataTable);
            Assert.IsTrue(dataTable.Rows.Count > 0);
            Assert.IsTrue(dataTable.Columns.Count > 0);
            Assert.IsNotNull(dataTable.Rows[0][0]);

            // Проверяем конвертер
            var networkConverter = new NetworkDataSetConverter();
            var networkDataSet   = networkConverter.Convert(dataTable);

            Assert.IsNotNull(networkDataSet);
            Assert.IsTrue(networkDataSet.Entities != null && networkDataSet.Entities.Any());
            Assert.IsTrue(networkDataSet.Attributes != null && networkDataSet.Attributes.Any());
        }