C# 显示红色“的图像”;X";从资源加载时在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

我正在尝试将项目资源中的图像列添加到新创建的DataGridView中 代码如下:

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的上下文菜单上禁用用户输入(新行)。。。