我有一个GUI,它从文件中加载数据,以便填充我的DataGridView数据。我有两个DataGridViews。一个用于团队,一个用于会员。当我点击其他团队时,它会向我显示与该团队相关的成员。
我希望能够为团队添加一个Image in Team Team,例如TeamLogo。我已经添加了列,并使其成为DataGridViewImageColumn。但是当我使用:
添加图像时 Image image = Image.FromFile(@"C:\Users\Matthew\Desktop\Images\ManU.jpeg");
Team_Logo.Image = image;
它为所有团队添加相同的图像是否有一种方法可以添加单独的图像,更有可能添加OpenFileDialog以便找到我自己的图像。
我不介意我不能按列进行操作,只要我每次更换团队时都必须有一个PictureBox,就会出现不同的图像。
答案 0 :(得分:0)
您真正需要做的就是为每一行分别加载每个值。
以下是一个例子:
首先,我创建一个列,添加它并为其命名:
DataGridViewImageColumn imgCol = new DataGridViewImageColumn();
int icIndex = dataGridView1.Columns.Add(imgCol);
dataGridView1.Columns[icIndex].Name = "Image";
现在我设置所有行的值。我使用ImageList
,这很好,因为它很快,并将确保获得相同大小的所有图像。
当然,您需要加载正确的图像。您可能希望通过imageList1.Images.Keys
集合访问它们。
foreach (DataGridViewRow row in dataGridView1.Rows)
if (row.Index < imageList1.Images.Count) // *
row.Cells["Image"].Value = imageList1.Images[row.Index];
现在每一行都会显示不同的图像。
根据您的SelectionMode,这样的内容将在PictureBox中显示图像:
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count > 0)
pictureBox1.Image = imageList1.Images[dataGridView1.SelectedRows[0].Index];
}
但您可能希望Image
显示PB
大于DGV
行?为此,您可以使用第二 ImageList
使用更大的ImageSize
(仅限256x256)或使用Images.Key
属性从磁盘加载图像。
更新
请注意,上面的代码使用简单且相当脆弱的关系将图像组合到行中,依赖于它们都是完整的并且顺序相同。
这应该可以用于测试用户界面,但之后你应该把它换成更健壮的东西。
我添加了一个检查(*),但这只会在图像少于行时阻止IndexOutOfRange错误。
一个想法可能是将团队名称与图像名称联系起来。不知道你的命名方案,我无法提供代码..
如果您希望整体可编辑,您需要考虑存储数据的方式和位置。但这些问题超出了原始问题的范围。