C1FlexGrid:在排序列上绘制排序符号

在上篇文章C1FlexGrid DataMap列自定义排序:中,我们讲述了在C1FlexGrid设置DataMap列后,如何自定义排序。本文就在此基础上,介绍如何按自己的规则绘制排序符号。排序的时候,列依靠排序顺序来进行值排序。因此,你需要根据排序的顺序,给列添加新的排序符号。这就需要使用C1FlexGrid的OwnerDraw事件,比较容易的绘制符号。当单元格重画的时候,这个事件就会被触发。首先,在Form初始化的时候,设置ShowSortPosition为None,并设置DrawMode为OwnerDraw。这样子就放弃原本Sort符号,改由OwnerDraw来画。然后,在OwnerDraw事件里,我们根据排序顺序绘制符号图像在header cell上。

C1FlexGrid DataMap列自定义排序

我们使用C1Flexgrid的DataMap属性在列设置单元格的值和展示值相关联, 并排序,这个时候的排序,是基于实际的值,例如:关键值。有些客户需要基于展示值对列进行排序,本文就介绍如何实现这个需求。首先,我们需要绑定C1Flexgrid到数据源。保存Northwind数据源的Products数据表,然后创建两个Dictionary对象,可以设置SupplierID列和CategoryID 列的DataMap属性。下面代码展示CompanyName替代SupplierID和CategoryName替代CategoryID。

C1PrintDocument: StartDoc-EndDoc和Generate的对比

很多时候,用户希望在C1PrintDocument中插入新页,他们不知道该使用StartDoc-EndDoc还是使用Generate方法,或者两者都使用。C1PrintDocument的创建既可以使用StartDoc-EndDoc也使用Generate方法。这两者是相似的,但是在实现上有所区别。在本文中,我们讨论创建documents和插入新页的两种方式。StartDoc()-EndDoc() 方法StartDoc方法标记document 产生的开始,在EndDoc方法标记document产生的结束。如果要用StartDoc-EndDoc 方法,render objects需要被添加到document的块中。例如:使用RenderBlock(), RenderDirect() 和RenderInline() 方法,如下所示:c1PrintDocument1.RenderBlock(renderTable1);Generate() MethodGenerate方法使用RefreshCalculatedValues刷新模式产生document。如果要用Generate方法,需要直接添加render objects到document的body。代码如下所示:this.c1PrintDocument1.Body.Children.Add(new C1.C1Preview.RenderText("Hello, World!"));

C1Chart在WinForm平台下的同步(一):滚动条同步

在WinForm平台下,如果有两个相同的C1Chart,如何保持两者在运行时候的同步呢?在接下来的一系列文章,我们专门讨论C1Chart的同步。首先就先来介绍滚动条同步。在文章的最后,有本文所用到的Demo,本文介绍的都是再此基础上进行同步讨论。首先,在设计界面拖拽两个C1Chart,保持大小和位置的一致,以及给两个C1Chart导入相同的数据。代码参考:c1Chart1.SaveChartToFile("Chart1_Data.xml");c1Chart2.LoadChartFromFile("Chart1_Data.xml");接着,C1Chart的滚动条在默认情况下是不显示的,因此需要通过代码或是设计界面将其显示出来。代码参考:this.c1Chart1.ChartArea.AxisX.ScrollBar.Visible = true; this.c1Chart1.ChartArea.AxisY.ScrollBar.Visible = true; this.c1Chart2.ChartArea.AxisX.ScrollBar.Visible = true; this.c1Chart2.ChartArea.AxisY.ScrollBar.Visible = true;其次,调用ScrollBar.AxisScroll事件,当轴的滚动条发生滚动,会触发该事件。

C1Chart在WinForm平台下的同步(二):缩放同步

在上篇文章中,我们讨论了C1Chart在WinForm平台下的同步(一):滚动条同步,我们讨论了如何在运行时保持两个C1Chart的滚动条同步。本文就在上篇文章的基础上,继续深入讨论在WinForm平台下,保持两个图表缩放的同步。同样的,在文章的最后,会附上本文所用到的Demo。首先,都是一样的,在设计界面拖拽两个C1Chart,保持大小和位置的一致,以及给两个C1Chart导入相同的数据。代码参考:c1Chart1.SaveChartToFile("Chart1_Data.xml");c1Chart2.LoadChartFromFile("Chart1_Data.xml");接着,设置C1Chart的交互,将Interaction.Enable属性设置为true。确保在C1Chart缩放行为可用。代码参考: c1Chart1.Interaction.Enabled = true; c1Chart1.Interaction.Actions["Zoom"].Modifier = Keys.None; c1Chart1.Interaction.Actions["Scale"].Modifier = Keys.Control; c1Chart1.Interaction.Actions["Translate"].Modifier = Keys.Shift; c1Chart1.Interaction.Actions["Rotate"].Modifier = Keys.Alt; c1Chart2.Interaction.Enabled = true; c1Chart2.Interaction.Actions["Zoom"].Modifier = Keys.None; c1Chart2.Interaction.Actions["Scale"].Modifier = Keys.Control; c1Chart2.Interaction.Actions["Translate"].Modifier = Keys.Shift; c1Chart2.Interaction.Actions["Rotate"].Modifier = Keys.Alt;然后,通过LayoutLabels事件,获取其中一个的ScrollBar的Scale,赋值给另一个C1Chart。

C1Chart在WinForm平台下的同步(三):TriangleMarker同步

在上面的两篇文章中,我们分别讨论了C1Chart在WinForm平台下的同步(一):滚动条同步和C1Chart在WinForm平台下的同步(二):缩放同步,我们讨论了如何在运行时保持两个C1Chart的滚动条同步和缩放同步。本文是本系列的最后一篇,在前两个的基础上,继续深入讨论在WinForm平台下,保持拖拽标签Mark的同步。同样的,在文章的最后,会附上本文所用到的Demo。首先,都是一样的,在设计界面拖拽两个C1Chart,保持大小和位置的一致,以及给两个C1Chart导入相同的数据。代码参考:c1Chart1.SaveChartToFile("Chart1_Data.xml");c1Chart2.LoadChartFromFile("Chart1_Data.xml"); 接着,给C1Chart添加X轴的ValueLabel,让其显示成可移动的带三角标的Marker的样子,如图: 红色竖直带三角符号的线就是我们需要的Marker。有客户问,这条线是如何添加上去的,有没有内置的接口。其实,这就是我们经常用到的AxisX的ValueLabels,只是将其Appearance设置为TriangleMarker,并且将Moveable设置为true,这样就可以在X轴上显示一条Marker的线。注意:要将AxisX.AnnoMethod 属性设置为AnnotationMethodEnum.Mixed,我们设的Marker线才能显示出来。代码参考: this.c1Chart1.ChartArea.AxisX.ValueLabels.Add(1, "Marker"); this.c1Chart1.ChartArea.AxisX.ValueLabels[0].Appearance = ValueLabelAppearanceEnum.TriangleMarker; this.c1Chart1.ChartArea.AxisX.ValueLabels[0].Moveable = true; this.c1Chart1.ChartArea.AxisX.ValueLabels[0].GridLine = true; this.c1Chart1.ChartArea.AxisX.ValueLabels[0].Color = Color.Red; c1Chart1.ChartArea.AxisX.AnnoMethod = AnnotationMethodEnum.Mixed; 同样,通过LayoutLabels事件,获取其中一个的ValueLabel的NumericVaue,赋值给另一个C1Chart。

Spread for WinForms:根据 Spread 尺寸自适应行高列宽

Spread COM 的 AutoSize 属性用于设置行列充满Spread的表格控件。Spread WinForms版本中没有相应的接口,但是我们可以通过自定义方法来实现这个功能,本篇文章中将阐述如何实现这个功能。

Spread 表格控件:自定义列脚公式

最近有用户在论坛中询问 Spread表格控件 如何自定义列脚公式,Spread 表格控件使用 SetAggregationType 方法设置列脚中的公式,参数 AggregationType 用于指定公式类型。本篇博客中我们将阐述如何实现自定义列脚公式。例如,我们希望计算某列中数值超过 10 的单元格之和。具体实现代码如下:

为什么50%的葡萄城控件客户选择续订金牌服务?

当您购买带金牌服务的产品授权的时候,会得到一年的金牌技术服务,这一年内您就可以使用到软件的最新版本、电话支持和高优先级的论坛支持服务。一年以后,您可能会觉得“我很满意现在拥有的版本,新版本对我没什么价值”、“我们的产品已经比较熟悉”,不再需要葡萄城金牌服务了。也有客户因为预算原因无法及时续订。您想知道为什么有50%的客户选择续订金牌服务吗?下面是我们收集和整理的一些客户心得。

ActiveReports 报表:自定义打印

ActiveReports 报表控件可以灵活的控制打印设置,本篇文章中我们将介绍以下内容:直接打印报表设置默认打印对话框 使用自定义打印对话框