У меня есть 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?