我有一个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中?
答案 0 :(得分:0)
我知道这早就该开始了,但是我应该为那些偶然遇到这个问题的人和我一样更新答案。感谢@TaW的答案。在binding.Format
中,将代码更改为此:
String path = convertEventArgs.Value.ToString();
if (!path.StartsWith(Application.StartupPath + @"\Image\"))
{
convertEventArgs.Value = Application.StartupPath + @"\Image\" + convertEventArgs.Value;
}
这应该防止在每次调用DataBinding时添加字符串,并有助于将数据正确绑定到控件。