自定义图标会破坏DataGridView吗?

时间:2012-05-04 16:15:59

标签: c# datagridview icons

我有一个显示MMS消息列表的DataGridView。为了区分发送和接收,我在一列中放了一个右箭头和左箭头。我们的客户喜欢它,但希望右箭头更加清晰,尤其是在国际环境中。

我使用右箭头并在Visual Studio 2003中打开它(我使用VS2010编写应用程序)。我重新着色了图标,它看起来很棒,但是当我去显示包含Control时,我收到以下错误:

DataGridView中发生以下异常:

System.ArgumentException:参数无效。    at System.Drawing.Image.FromStream(Stream stream,Boolean useEmbeddedColorManagement,Boolean validateImageData)   System.Drawing.ImageConverter.convertFrom上的(ITypeDescriptorContext上下文,CultureInfo文化,对象值)    at System.Windows.Forms.Formatter.FormatObjectInternal(Object value,Type targetType,TypeConverter sourceConverter,TypeConverter targetConverter,String formatString,IFormatProvider formatInfo,Object formattedNullValue,Object dataSourceNullValue)    at 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[]);

当我将数据添加到行时,我有一个转换Icon的方法。

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块中,这样我就可以看到Exception,但它不会触发catch。

其他一些信息: - 图标存储为资源,由Properties.Resources.RightArrow调用 - 更改颜色后,我只是在VS2003中保存文件,没有另存为。该文件仍然显示为图标无处不在。 - 回到VS2010,资源文件确实有新的颜色方案并在那里正确渲染。

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

我不会这样编辑图像。如果您想要一组有效的箭头,这些箭头全部支持添加到DataGridView,那么到目录

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033

在这里你会找到一个.zip文件。解压缩。

然后你会发现带有MS图标和图像等的varios子目录。导航到

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033
    \VS2010ImageLibrary\VS2010ImageLibrary\Objects\png_format\WinVista

在这里,您可以找到所有不同颜色的箭头。我的建议是使用这些,而不是对现有文件进行位图编辑。

我希望这会有所帮助。