我有一个显示彩信列表的 DataGridView。为了区分发送和接收,我在列中放置了一个右箭头和左箭头。我们的客户喜欢它,但希望右箭头为绿色以更加清晰,尤其是在国际环境中。
我选择了右箭头并在 Visual Studio 2003 中打开它(我正在使用 VS2010 编写应用程序)。我重新着色了图标,它看起来很棒,但是当我去显示包含控件时,我收到以下错误:
DataGridView 出现以下异常:
System.ArgumentException:参数无效。 在 System.Drawing.Image.FromStream(流流,布尔 useEmbeddedColorManagement,布尔 validateImageData) 在 System.Drawing.ImageConverter.convertFrom(ITypeDescriptorContext 上下文,CultureInfo 文化,对象值) 在 System.Windows.Forms.Formatter.FormatObjectInternal(对象值, 在 System.Windows.Forms.DataGridViewCell.GetFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context )
要替换此默认对话框,请处理 DataError 事件。
当我创建要填充数据的 DataTable 时,我在将具有图标的列上使用它
dt.Columns.Add(sDirection);
dt.Columns[sDirection].DataType = typeof(Byte[]);
当我将数据添加到行时,我有一个转换图标的方法。
internal static Byte[] ConvertIconToByteArray(Icon pIcon) {
MemoryStream ms = new MemoryStream();
pIcon.Save(ms);
return (ms.GetBuffer());
}
我将 DataTable 添加到 DataGridView
grdMMSList.DataSource = dt.DefaultView;
(为了清楚起见,从上面的代码中删除了方法调用)
我在调试器中进行了操作,并将 DefaultView 设置为 DataSource 是引发错误的地方。我尝试将它放在 try/catch 块中,这样我就可以看到异常,但它不会触发捕获。
只是其他一些信息: - 图标存储为资源并由 Properties.Resources.RightArrow 调用 - 更改颜色后,我只是将文件保存在 VS2003 中,没有另存为。该文件仍然在各处显示为图标。- 回到 VS2010,资源文件确实有新的配色方案并在那里正确渲染。
提前感谢您提供的任何帮助。