Привязка данных PictureBox к относительному пути в winform - PullRequest
1 голос
/ 02 мая 2019

У меня есть winform, которая извлекает данные из базы данных в DataGridView и привязывает их к нескольким текстовым полям и PictureBox. У меня есть метод привязки и загрузки данных для перезагрузки и повторной привязки при изменении данных, как показано ниже.

private void LoadData()
        {
            DataTable dtDS = new System.Data.DataTable();
            dtDS = prodController.GetData();
            dgvProduct.DataSource = dtDS;
        }
private void DataBinding()
        {
            txtProductID.DataBindings.Clear();
            txtProductID.DataBindings.Add("Text", dgvProduct.DataSource, "ProductID");
            txtProductName.DataBindings.Clear();
            txtProductName.DataBindings.Add("Text", dgvProduct.DataSource, "ProductName");
            ...
            bxImage.DataBindings.Clear();
            bxImage.DataBindings.Add("ImageLocation", dgvProduct.DataSource, "ImagePath");
        }

Сначала я сохранил абсолютный путь к изображению в базе данных в виде строки, и он отлично работал, связывая данные в элемент управления. Но после этого я хочу сохранить только имя изображения в базе данных, сами изображения перемещаются в папку Image в папке запуска приложения, чтобы я мог загрузить изображение следующим образом:

bxImage.Image = Image.FromFile(Application.StartupPath + @"\Image\Student\" + imagePath);

Я следовал Связать ли метку в C # с дополнительным текстом? , чтобы добавить, как показано ниже, в мой метод DataBinding:

var binding = new Binding("ImageLocation", dgvProduct.DataSource, "ImagePath");
            binding.Format += delegate (object sentFrom, ConvertEventArgs convertEventArgs)
            {
                convertEventArgs.Value = Application.StartupPath + @"\Image\" + convertEventArgs.Value;
            };
            bxImage.DataBindings.Add(binding);

Он работал как первый, но после каждого вызова LoadData и DataBinding строка добавляется друг к другу, делая путь недействительным. Даже если я вызвал очистку DataBinding и сбросил формат, он все равно добавлялся при каждом вызове методов. Есть ли способ сделать это правильно или я должен использовать метод CellClicked из DataGridView, чтобы загрузить изображение в PictureBox?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...