C# 显示红色“的图像”;X";从资源加载时在DataGridView中
我正在尝试将项目资源中的图像列添加到新创建的DataGridView中 代码如下:C# 显示红色“的图像”;X";从资源加载时在DataGridView中,c#,image,datagridview,C#,Image,Datagridview,我正在尝试将项目资源中的图像列添加到新创建的DataGridView中 代码如下: DataGridViewImageColumn myImage = new DataGridViewImageColumn(); myImage.Image = Properties.Resources.bullet_arrow_down; myImage.ImageLayout = DataGridViewImageCellLayout.Zoom; myImage.Name = "Remove"; Direct
DataGridViewImageColumn myImage = new DataGridViewImageColumn();
myImage.Image = Properties.Resources.bullet_arrow_down;
myImage.ImageLayout = DataGridViewImageCellLayout.Zoom;
myImage.Name = "Remove";
DirectoryGrid.Columns.Add(myImage);
但是当我运行代码时,我得到的是默认的“X”图像,而不是我选择的图像。
图像是否尺寸过大?(它是一个32x32的ico)
我必须添加一些位转换吗
大多数在线代码都希望您从文件中加载图像,但我认为这很混乱。但如果必须这样做的话,我会这样做。但我发现一些参考资料表明此代码应该可以正常工作
请注意,此图像用于另一个按钮,其工作正常。
我还尝试了其他图像。您所拥有的将适用于通过
DataGridView.DataSource
添加的行。但是,正如您所看到的,NewRow
仍然显示一个红色的x
。这可以如图所示解决。但是,一旦您编辑了NewRow
的一个单元格并添加了另一个单元格,编辑行就不再有您的图像,而是返回到红色的x
解决方案
不要处理CellFormatting
事件,而是处理DataGridView.RowsAdded
:
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
if (this.dataGridView1.Columns.Contains("ImageColumnName"))
{
this.dataGridView1.Rows[e.RowIndex].Cells["ImageColumnName"].Value = Properties.Resources.MySavedImage;
}
}
但是,这不会捕获添加的第一个NewRow
,因为它是在第一列添加到DataGridView
后添加的。因此,除非第一列是图像列,否则您还需要执行以下操作:
this.dataGridView1.Columns.Add(myImageColumn);
this.dataGridView1.Rows[this.dataGridView1.NewRowIndex].Cells["ImageColumnName"].Value = Properties.Resources.MySavedImage;
谢谢,我不知道问题的根本原因。现在我知道了。在我的例子中,可以在DatagridView的上下文菜单上禁用用户输入(新行)。。。