用于WinForms的teleerik UI免费下载30天试用版

如何在RadGridView列加载SVG图像

环境

产品版本 产品 作者
2022.3.913 RadGridView for WinForms Desislava Yordanova

描述

通常,SVG(矢量)图像作为XML/文本内容存储在数据库中。当RadGridView绑定到这样一个DataTable时,文本表示将显示在自动生成的列中:

svg-image-column-in-gridvie 001

本文演示了如何添加支持SVG图像的网格列的示例方法。

解决方案

有必要创建一个导数GridViewImageColumn并使用一个自定义单元格元素来显示SVG图像。该示例依赖于这样一个事实:单元格的值包含图像的XML/文本内容。所取得的成果如下图所示:

svg-image-column-in-gridvie 002

public RadForm1() {InitializeComponent();DataTable dt = new DataTable();dt.Columns。添加(“Id”,typeof (int));dt.Columns。添加(“名字”,typeof (string));dt.Columns。添加(SVG, typeof (string));string [] = System.IO.Directory.GetFiles文件 (@"..\..\..\ svg文件”);Int id = 0; foreach (string file in files) { string readText = System.IO.File.ReadAllText(file); id++; dt.Rows.Add(id, "Name" + id, readText); } this.radGridView1.DataSource = dt; SvgColumn svgColumn = new SvgColumn(); svgColumn.HeaderText = "SVG Preview"; svgColumn.FieldName = "SVG"; this.radGridView1.Columns.Add(svgColumn); this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; this.radGridView1.TableElement.RowHeight = 40; } public class SvgColumn : GridViewImageColumn { public override Type GetCellType(GridViewRowInfo row) { if (row is GridViewDataRowInfo || row is GridViewNewRowInfo) { return typeof(SvgCellElement); } return base.GetCellType(row); } } public class SvgCellElement : GridImageCellElement { public SvgCellElement(GridViewColumn column, GridRowElement row) : base(column, row) { } protected override Type ThemeEffectiveType { get { return typeof(GridImageCellElement); } } protected override void SetContentCore(object value) { base.SetContentCore(value); if (this.Value != null) { this.ImageDrawType = Telerik.WinControls.ImageDrawType.Svg; this.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; if (this.RowInfo.Tag == null) { this.RowInfo.Tag = RadSvgImage.FromXml(this.Value + ""); } this.SvgImage = this.RowInfo.Tag as RadSvgImage; } } }
Public Sub New() InitializeComponent() Dim dt As DataTable = New DataTable() dt. columns。添加(“Id”,GetType(Integer)) dt.Columns。添加("Name", GetType(String)) dt.Columns。Add("SVG", GetType(String)) Dim files As String() = System.IO.Directory.GetFiles("..\..\.. ")\svg files") Dim id作为整数= 0对于每个文件作为字符串在文件Dim readText作为字符串= System.IO.File.ReadAllText(文件)id += 1 dt.Rows. .Add(id, "Name" & id, readText) Next Me.RadGridView1。DataSource = dt Dim svgColumn As svgColumn = New svgColumn () svgColumn。HeaderText = "SVG预览"FieldName = "SVG" . Me.RadGridView1. columns . add (svgColumn) . Me.RadGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode。填补Me.RadGridView1.TableElement。RowHeight = 40结束子公共类SvgColumn继承GridViewImageColumn公共覆盖函数GetCellType(ByVal行作为gridviewdatarowino)作为类型如果TypeOf行是gridviewdatarowino OrElse TypeOf行是gridviewnewrowino然后返回GetType(SvgCellElement)结束如果返回MyBase.GetCellType(行)结束函数结束类公共类SvgCellElement继承GridImageCellElement公共子New(ByVal列作为GridViewColumn, ByVal行作为GridRowElement) MyBase。New(列,行)End Sub Protected覆盖只读属性ThemeEffectiveType作为类型Get返回GetType(GridImageCellElement) End Get结束属性Protected覆盖Sub SetContentCore(ByVal值作为对象)MyBase.SetContentCore(值)如果我。价值不是没有我。ImageDrawType = Telerik.WinControls.ImageDrawType.Svg Me。ImageLayout = System.Windows.Forms.ImageLayout.Zoom如果Me. rowinfo . tag是Nothing那么Me. rowinfo . tag = RadSvgImage.FromXml(Me. xml)。Value & "")结束如果我。SvgImage = TryCast(Me.RowInfo.)Tag, RadSvgImage) End If End Sub End Class

请记住,矢量图像的复杂性和记录的数量可能会影响行大小调整或滚动性能。

另请参阅

在本文中
Baidu
map