将PictureBox数据绑定到WinForm中的相对路径

时间:2019-05-02 08:17:30

标签: c# winforms data-binding

我有一个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");
        }

首先,我将图像的绝对路径作为字符串存储在数据库中,并且可以很好地将数据绑定到控件中。但是之后,我只想将图像名称存储在数据库中,将图像本身移到“应用程序”启动文件夹中的“图像”文件夹中,这样我就可以像这样加载图像:

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

我跟随Databinding a label in C# with additional text?向我的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清除并重置格式,每次调用方法时仍会添加该格式。有没有一种方法可以正确执行此操作,还是应该使用DataGridView的CellClicked方法将图像加载到PictureBox中?

1 个答案:

答案 0 :(得分:0)

我知道这早就该开始了,但是我应该为那些偶然遇到这个问题的人和我一样更新答案。感谢@TaW的答案。在binding.Format中,将代码更改为此:

String path = convertEventArgs.Value.ToString();
if (!path.StartsWith(Application.StartupPath + @"\Image\"))
{
    convertEventArgs.Value = Application.StartupPath + @"\Image\" + convertEventArgs.Value;
}

这应该防止在每次调用DataBinding时添加字符串,并有助于将数据正确绑定到控件。