lijigang1982
勤奋、进取,希望有美好的未来!

导航

统计
公告
 

2009年6月8日

 

原文参考:How to customize the tooltips displayed in the chart

图表提示信息可以定制在鼠标悬停在图表上或者点击图表时显示,也可以设置成不显示提示内容,具体代码参考下列设置。

点击图表显示提示信息:

this.UltraChart1.Tooltips.Display= Infragistics.UltraChart.Shared.Styles.TooltipDisplay.MouseClick;

悬停时显示提示信息:

this.UltraChart1.Tooltips.Display= Infragistics.UltraChart.Shared.Styles.TooltipDisplay.MouseMove;

不显示提示信息:

this.UltraChart1.Tooltips.Display= Infragistics.UltraChart.Shared.Styles.TooltipDisplay.Never;

 

当设置鼠标在图表上悬停时以显示信息提示时,提示内容可以是轴标签值与数据值,或者是设置成行列号与数据值,也可以自定义提示内容。参考以下代码:

显示轴标签值与数据值:

this.UltraChart1.Tooltips.Format = Infragistics.UltraChart.Shared.Styles.TooltipStyle.LabelPlusDataValue;

显示行列号与数据值:

this.UltraChart1.Tooltips.Format = Infragistics.UltraChart.Shared.Styles.TooltipStyle.RowColumnPlusDataValue;

自定义图表提示内容:

this.UltraChart1.Tooltips.Format=Infragistics.UltraChart.Shared.Styles.TooltipStyle.Custom;

this.UltraChart1.Tooltips.FormatString="tooltip";

 

以上我们提到了自定义图表提示信息的若干设置,实际上我们还可以控制提示信息的外观,包括背景色、字体大小、文字颜色等,参考以下代码:

this.UltraChart1.Tooltips.BackColor=System.Drawing.Color.Yellow;

this.UltraChart1.Tooltips.FontColor=System.Drawing.Color.Blue;

this.UltraChart1.Tooltips.BorderColor=System.Drawing.Color.Red;

this.UltraChart1.Tooltips.BorderThickness=3;

 

最终生成效果参见图1

 

图1   自定义图表提示演示效果

 

 

 

posted @ 2009-06-08 13:10 李计刚 阅读(165) 评论(0) 编辑
 

SET ANSI_NULLS{ON|OFF}:用来指定对空值使用等于(=)和不等于(<>)比较运算符时,这些运算符应遵从什么行为.具体是什么样的行为呢?SQL-92要求如下:
SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE,是默认值。
当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行;使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行;使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有非 XYZ 值和非 NULL的行。

SQL Server联机丛书关于ANSI_NULLS里有这样一个代码示例,给出了直观的效果,我添加了输出提示,如下:
-- Create table t1 and insert values.
CREATE TABLE t1 (a INT NULL)
INSERT INTO t1 values (NULL)
INSERT INTO t1 values (0)
INSERT INTO t1 values (1)
GO

-- Print message and perform SELECT statements.
PRINT 'Testing default setting'
DECLARE @varname int
SELECT @varname = NULL
SELECT *
FROM t1
WHERE a = @varname     --结果为空
SELECT *
FROM t1
WHERE a <> @varname    --结果为空
SELECT *
FROM t1
WHERE a IS NULL        --结果为NULL
GO

-- SET ANSI_NULLS to ON and test.
PRINT 'Testing ANSI_NULLS ON'
SET ANSI_NULLS ON
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT *
FROM t1
WHERE a = @varname     --结果为空
SELECT *
FROM t1
WHERE a <> @varname    --结果为空
SELECT *
FROM t1
WHERE a IS NULL        --结果为NULL
GO

-- SET ANSI_NULLS to OFF and test.
PRINT 'Testing SET ANSI_NULLS OFF'
SET ANSI_NULLS OFF
GO
DECLARE @varname int
SELECT @varname = NULL 
SELECT *
FROM t1
WHERE a = @varname     --结果为NULL
SELECT *
FROM t1
WHERE a <> @varname    --结果为0,1
SELECT *
FROM t1
WHERE a IS NULL        --结果为NULL
GO

-- Drop table t1.
DROP TABLE t1

从上面代码的运行效果来看:
①当SET ANSI_NULLS ON时, =null或 <> null的查询条件时,结果都为空;如果为 IS NULL 才能显示NULL的行。
②不对ANSI_NULLS进行设置时,其执行效果与SET ANSI_NULLS ON时的效果一致,此处与SQL-92的要求之一“SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE,是默认值。”冲突哦?!
又怎么理解这个问题呢?
SQL Server联机丛书里ANSI_NULLS的知识文档里有答案:“SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序在连接时自动将 ANSI_NULLS 设置为 ON。该设置可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性(它们在连接到 SQL Server 之前在应用程序中设置)中进行配置。”

PS:其实,实际使用过程中,我们并没有考虑ANSI_NULLS是被设置为ON还是False,我们对空值的处理都是IS NULL 或者 IS NOT NULL

posted @ 2009-06-08 11:07 李计刚 阅读(139) 评论(0) 编辑
 
     小区里最近搬来一户人家,值得一提的是他们家有对双胞胎男孩,小家伙们不大,刚会走路的样子。每每上班的早上或是周末,我总能在小区的路上看到他们,他们被自己的爷爷奶奶细心照顾着!小家伙们长的都很讨人喜欢,个头一般高,长相更是从一个模子刻出来一般,衣服鞋袜也是一样,似乎为了强调,告诉别人他们是对双胞胎吧!我曾好奇的问他们的奶奶,平常怎么区分这对双胞胎,他们看起来一模一样么?那位奶奶含糊的回答我说“在一起的时间久了,靠感觉就能分辨出来!”,说得很玄,不过就我自己的感觉,这两小家伙,被人推着玩时一个很安静,一个就比较活泼,应该靠个性对他们进行的区分吧!
     因为看到了他们,那两个可爱的家伙,这段有想到他们时,后一个想法就演变成了:自己要有个双胞胎小孩该多好哦!想想我们现在的独生子女政策,虽然有些地方也施行“头胎是女孩,间隔五年持证怀”的政策,正常情况下,要养两个孩子还得花段时间和精力,呵!要是一胎来对双胞胎,要两个孩子的想法一次就能满足,方便得很!有了两个小孩,他们成长的过程中也不会觉得孤单!曾经把这样的想法对我的一个朋友说起,她笑话我没有能力抚养两个小孩的同时,还很认真的告诉我“生双胞胎是小概率事件!”小概率事件么?我不禁莞尔,想到了我的外婆,一生10个孩子,就有两对双胞胎,这是小概率事件,外婆她也忒幸运了,哈哈!从遗传呀什么的角度看,我应该比别人有更多的机会生双胞胎小孩,呵呵!
     也因为看到他们,想到了大学时听到的一个故事。故事大致说有对双胞胎姐妹,姐姐成绩一团糟,还留了一级,妹妹倒很聪明,顺利的考取了一流大学,到姐姐参加高考的时候,家人安排妹妹回来替姐姐考试,别人都没有察觉,结果姐姐也进了一流大学!当时听了这个故事,还很羡慕人家,有个好帮手!今天也是高考日,祝福考生有好的发挥哦!
     未来,结婚生子了,最好来对双胞胎,我喜欢!
posted @ 2009-06-08 08:50 李计刚 阅读(64) 评论(0) 编辑

2009年6月4日

     前段写的博文介绍了用图表向导创建ColumnLineChart的整个过程,ColumnLineChart归属于简单图表,用类似的向导步骤可创建出复合图表,相关步骤可参考:Chart_Creating_a_Composite_Chart_Using_the_ Chart_Wizard

既然可通过向导全程定制Composite Chart,那么用书写代码的方式来生成Composite Chart也当然是可以的了!此过程,如果你英文也够好,你也可以参考如下内容:Chart_Creating_a_Composite_Chart_in Code_Part
     但是如果你英文不够好,或者需要有人指导下,请看本部分内容,本文就是介绍用手写代码方式生成符合图表,其间属性设置根据我的理解做了注释,你要是还不明白,建议你尝试着修改修属性值,然后比照生成图表具体理解,具体实现代码如下,你只需要复制其在Page_load事件中添加,再拖一个UltraChart到该页面即可。
        //定义数据源,根据其可方便设置series
        DataTable dt = new DataTable();
        dt.Columns.Add("col1", typeof(int));
        dt.Columns.Add("col2", typeof(int));
        dt.Columns.Add("col3", typeof(int));
        dt.Columns.Add("col4", typeof(string));       
        dt.Rows.Add(new object[] {2, 14, 12, "H1"});
        dt.Rows.Add(new Object[] {0, 11, 10, "H2"});
        dt.Rows.Add(new Object[] {1, 9, 11, "H3"});
        dt.Rows.Add(new Object[] {0, 10, 11, "H4"});
        dt.Rows.Add(new Object[] {4, 12, 9, "H5"});
        dt.Rows.Add(new Object[] {1, 11, 10, "H6"});
        dt.Rows.Add(new Object[] {1, 8, 7, "H7"});
        dt.Rows.Add(new Object[] {5, 10, 10, "H8"});
       
        //以下开始介绍生成Composite的完整步骤

        //第一步:设置UltraChart1图表为组合图表Composite
        this.UltraChart1.ChartType = ChartType.Composite; 

        //第二步:创建一个图表区域ChartArea,并在UltraChart1图表组合中增加一个图表区域
        ChartArea area = new ChartArea();
        this.UltraChart1.CompositeChart.ChartAreas.Add(area); 

        //第三步:创建X轴,X2轴和Y轴,并添加到图表区域
        //创建X轴,Composite的ColumnChart需要
        AxisItem xAxisColumn = new AxisItem();
        xAxisColumn.OrientationType = AxisNumber.X_Axis;
        xAxisColumn.DataType = AxisDataType.String ;
        xAxisColumn.SetLabelAxisType = Infragistics.UltraChart.Core.Layers.SetLabelAxisType.GroupBySeries;
        xAxisColumn.Labels.ItemFormat = AxisItemLabelFormat.ItemLabel;
        xAxisColumn.Extent = 20;
        //创建Y轴,Composite的ColumnChart和LineChart都需要
        AxisItem yAxis = new AxisItem();
        yAxis.OrientationType = AxisNumber.Y_Axis;
        yAxis.DataType = AxisDataType.Numeric ;
        yAxis.Labels.ItemFormat = AxisItemLabelFormat.DataValue;
        yAxis.RangeType = AxisRangeType.Custom;
        yAxis.RangeMin = 0;
        yAxis.RangeMax = 20;
        yAxis.Extent = 20;
        //创建X2轴, Composite的LineChart需要
        AxisItem xAxisLine = new AxisItem();
        xAxisLine.OrientationType = AxisNumber.X2_Axis;
        xAxisLine.DataType = AxisDataType.String ;
        xAxisLine.SetLabelAxisType = Infragistics.UltraChart.Core.Layers.SetLabelAxisType.ContinuousData;
        xAxisLine.Labels.ItemFormat = AxisItemLabelFormat.ItemLabel;
        xAxisLine.Extent = 20;
        //添加轴线到绘图区域
        area.Axes.Add(xAxisColumn);
        area.Axes.Add(xAxisLine);
        area.Axes.Add(yAxis);

        //第四步:创建若干曲线连续点实例,设置其取值
        //生成ColumnChart所需的一个series
        NumericSeries seriesColumn = new NumericSeries();
        //数据标签值
        seriesColumn.Label = "A";
        seriesColumn.Data.DataSource = dt;
        //轴线上显示的标签信息
        seriesColumn.Data.LabelColumn = "col4";
        //图表上要显示的值
        seriesColumn.Data.ValueColumn = "col2";
        seriesColumn.DataBind();
        //生成ColumnChart所需的一个series
        NumericSeries seriesColumn2 = new NumericSeries();
        //数据标签值
        seriesColumn2.Label = "B";
        seriesColumn2.Data.DataSource = dt;
        //轴线上显示的标签信息
        seriesColumn2.Data.LabelColumn = "col4";
        //图表上要显示的值
        seriesColumn2.Data.ValueColumn = "col3";
        seriesColumn2.DataBind();
        //生成LineChart所需的一个series
        NumericSeries seriesLine = new NumericSeries();
        seriesLine.Data.DataSource = dt;
        //轴线上显示的标签信息
        seriesLine.Data.LabelColumn = "col4";
        //图表上要显示的值
        seriesLine.Data.ValueColumn = "col1";
        seriesLine.DataBind();      
        this.UltraChart1.Series.Add(seriesLine);
        this.UltraChart1.Series.Add(seriesColumn);
        this.UltraChart1.Series.Add(seriesColumn2); 

        //第五步:创建图表样式(外观),并添加到图层集中
        //ColumnChart的图表样式
        ChartLayerAppearance ColumnLayer = new ChartLayerAppearance();
        ColumnLayer.AxisX = xAxisColumn;
        ColumnLayer.AxisY = yAxis;
        ColumnLayer.ChartArea = area;
        //设置图表类型,ColumnChart条形图
        ColumnLayer.ChartType = ChartType.ColumnChart;
        ColumnLayer.Series.Add(seriesColumn);
        ColumnLayer.Series.Add(seriesColumn2);
        //LineChart的图表样式
        ChartLayerAppearance LineLayer = new ChartLayerAppearance();
        LineLayer.AxisX = xAxisLine;
        LineLayer.AxisY = yAxis;
        LineLayer.ChartArea = area;
        //设置图表类型,LineChart条形图
        LineLayer.ChartType = ChartType.LineChart;
        LineLayer.Series.Add(seriesLine);
        this.UltraChart1.CompositeChart.ChartLayers.Add(ColumnLayer);
        this.UltraChart1.CompositeChart.ChartLayers.Add(LineLayer);    

    根据上述代码所生成的Composite Chart如下图:

 

posted @ 2009-06-04 19:20 李计刚 阅读(154) 评论(2) 编辑
 
      外地人去次重庆,沿着解放碑步行街往朝天门方向走一趟,你会觉得已去过重庆了,重庆也不过如此!而且到处都要爬上爬下,怪累人!但你要修正下你的旅行目的,来一次访古之旅,“山城”重庆会让你不虚此行!那里有很多的古迹,而且随着城市建设的发展,那些古街、古建筑大部分将渐渐消失!我要说,从时间、地点来看,你算来对了!
重庆三峡青年旅舍(背包客栈)
巴渝吊脚楼风格建筑
     提到这个客栈,它的特色就是建筑本身是不多见的巴渝吊脚楼风格,好好看看上面的图,你能想象整座建筑就靠这几根木柱子支撑着么?而且经历岁月的洗礼,建筑本身还没有败坏的迹象!
     除了建筑特色外,要我说,这个客栈选址真是好,是动与静的完美结合。沿着客栈门口的小路,拾级而上,就到了重庆的繁华地带朝天门;客栈对面就是长江,入夜,对岸的灯光打在江面上,波光粼粼的,住在临江的房子里端杯热茶临窗欣赏长江边的夜景、灯饰,再逍遥不过了;而客栈脚下就是“湖广会馆牌坊”和重庆旧门户“东水门”,这座客栈立在此透着股宁静感。


湖广会馆牌坊
 
东水门
十八梯老街
 
堆叠的旧房子
     我是从一个不知名的菜市场进入到十八梯的,拾级而上,很难想象,我所在的是中国的直辖市重庆,恍惚间还以为自己时空转移到来到我老家天门的临河街呢,这地方,用破败、龙蛇混杂形容再恰当不过了。
     沿着石阶而上,路边布满着一间间的裁缝店、发廊、药铺、饭馆,还有各色各样的手工作坊,商铺后面的密集平房不仅是破旧,简直可以用破烂来形容;这条街每隔段就会有录象厅,“劈劈啪啪”的录象打斗声传上街头;游戏机房和兼卖着杂货的赌博机房,也吸引着一批又一批的年轻人。
      重庆人的生活是很悠闲的,漫步街头,“唏呖哗啦”的麻将声,玩纸牌的吆喝也是此起彼伏煞是热闹,这边的棋牌室很有特色,兼着饭馆,大概会管客人的伙食哦,呵呵!不少游手好闲的年轻人也加入了打纸牌的队伍,眼角余光时不时地瞄向街上的路人,对我这样显而易见的旅游者投来狡诈凶狠的目光,令人感到似乎危机四伏。
通远门
通远门
      据史载:古代的重庆中心行政区域即现在的渝中区,明清以前有城门十七座且“九开八闭”。所谓“九开”,即沿长江的朝天门、东水门、太平门、储奇门、金紫门、南纪门和沿嘉陵江的临江门、千斯门以及通陆路的通远门等九门是开放的。“八闭”,即翠微、太安、人和、凤凰、金汤、定远、洪崖、西水八门虽有城门而不开放,或是作备战之用。
     重庆的老城门因历史变迁和战火的毁损至今大多不存,现存的就只有通远门和东水门两处遗迹了。东水门在重庆三峡青年旅舍(背包客栈) 边上。通远门在市中心的七星岗附近,周围是高耸的建筑、繁忙的街路,现今只剩下一段还算雄伟的城墙,重庆市政府2005年把此处建成一个城墙公园,供市民游玩。
战争雕塑
      通远门古时是重庆的重要军事要塞,朝代更迭,此处往往就是一阵血雨腥风。远在南宋末年蒙古军强攻重庆,守将张珏率众守城在通远门激战,最终破门重庆失守;其后在明末清初,张献忠率部数十万,从水陆两路围攻重庆,最后的战场也在通远门,门陷城破生灵涂炭,如今此处的几段著名的战争史实的浮雕就是以其为历史背景。可以说,通远门见证了重庆的历史。
      好了,完工!
     下一站,山东青岛或北京,元气恢复后施行!
posted @ 2009-06-04 12:03 李计刚 阅读(67) 评论(0) 编辑

2009年6月3日

     要使用Infragistics控件集,决不是正确安装就万事大吉,这里有些小九九要注意:

     1、安装好Infragistics控件集后,需要执行程序文件夹"Infragistics NetAdvantage 2005 Volume 3 CLR 2.0"下的"Create NetAdvantage Visual Studio Toolbox Tab",否则无法使用Infragistics提供的若干好用控件。
     2、在VS.NET 2003环境下,执行完上述操作后(此时程序文件夹名为Infragistics NetAdvantage 2005 Volume 3 CLR 1.0),相关控件会自动出现在VS.NET 2003的工具箱中;而相关控件在VS.NET 2005环境里不会自动添加到工具箱中,需用户手工方式添入,这可在.NET Framework组件选择框里轻松找到。

posted @ 2009-06-03 18:38 李计刚 阅读(342) 评论(0) 编辑

2009年6月2日

摘要: 实现IRenderLabel接口以自定义标签显示格式,然后设置X轴的标签显示格式为我们所定义的样式。 阅读全文
posted @ 2009-06-02 18:54 李计刚 阅读(510) 评论(0) 编辑
 
 原文请查看此处

一、数据要求

列线图(Column Line Chart)的最低数据要求如下:

①、数据集包含不少于一个的数值列。推荐包含至少两个的数值列,这样可方便的绘制线图。

②、数据集至少包含一行数据。

尽管可自定义数据集,但如果不满足上述列线图的最低配置要求,会报错,死得相当难看。

二、列线图的数据绑定

满足列线图最低配置要求的数据集,列线图按如下规则展示数据:

①、如果数据集包含多行,每行是一个series

②、列线图是个复合体,可以视为列图(Columne Chart)和线图(Line Chart)的复合。可以为列图和线图指定相同的数据源或分别指定数据源。若为列线图指定相同的数据源,直接设置UltraChart.Data.DataSource属性即可;若为列线图指定不同的数据源,则要分别设置UltraChart.ColumnLineChart.ColumnData.DataSource属性和UltraChart.ColumnLineChart.LineData.DataSource属性.

列图绑定时,每一series的标签名称显示在X轴,每一series的数值会以列图形式显示,列的高代表值的大小,可以定义列值显示格式:UltraChart.Axis.Y.Labels.ItemFormatString = "<DATA_VALUE:##.##>"

线图绑定时,每一series被单独绘制,其中第一个数值是第一点,第二个数值是第二个点,依序下去,用线将这些点连接起来即成。 

举例:

现有如下数据源:

 

ActiveX

Java

NET

 Week1

20

80

60

 Week2

10

200

90

 Week3

100

40

110

 Week4

120

80

100

Week5

55

110

45

根据此数据源所绘制出的列线图如下:

 

posted @ 2009-06-02 11:33 李计刚 阅读(267) 评论(0) 编辑

2009年6月1日

      重庆被称为“山城”,城市建筑大都依山而建,然后两山之间再架起高架相通,延展开去就成了重庆的大体轮廓。
      重庆多山,平地很少,因此重庆的建筑不管是学校、办公楼还是住宅大都是高层,以有效利用建筑面积。所以,置身重庆这个地方,特别是在解放碑步行街,你会有深处香港、上海大都市的感觉,周围有太多太多的摩天建筑群。
      还是受地缘的影响,重庆的山多被分层利用。就我自己的观察来看:重庆的山被处理成几个尺寸渐小的圆台的叠加,底层圆台的上部为上一层圆台的基座;各层圆台底部绕基座边缘修着环山公路;圆台之间修着绕山公路,以方便市民从圆台底部绕到同层圆台顶部。你猜那些建筑立在哪?各圆台的斜面上,重庆人就这么聪明,尽最大可能利用着山的资源,构建起现代化的城市。另外,每一层圆台还修着台阶,从圆台底部直通顶部,供行人直接爬上爬下。这样的状态下,你会发现,有时到某地走路要比乘车快许多。比如从朝天门广场到解放碑步行街,爬阶梯一会就到了,要乘车的话,没直达公交;坐出租车,你就准备着绕远吧!
      和成都人一样,重庆人也相当的悠闲。漫步重庆街头,喝茶的、打麻将的比比皆是。我碰到的一位大哥,自称老重庆,在朝天门码头工作。这大哥下午三点多就下班了,和我一样在朝天门码头附近闲逛。他跟我讲,重庆差不多都这样,三点多就开始有人下班,商店五点左右差不多都关门了,由于下班早,很都人都喜欢泡茶馆、去舞厅打发时间。他还讲,到了夏天,到一定的气温后,他们就只上半天班,空闲时间更多,真令人羡慕!
      重庆的火锅很出名。到重庆后,同学招待我去的就是"秦妈火锅店",点的都是些重庆人常吃的东东,说是让我好好感受下!那火锅,香是很香,也够辣,吃下来我衣服都湿透了,不过确实感觉爽!等我自己出去逛的时候,才发觉重庆人的最爱其实不是火锅,是豆花,家家开餐厅的都有煮大大的一锅,还有挑着卖的,我在通顺门楼上就碰到位叫卖的。那豆花,我有尝一碗,淡淡的,感觉不怎么样,开店的那位大姐说你放点辅料就够味了,看着她说的那些东东,麻辣酱之类的玩意,一层辣椒碎末,重庆人还真能吃辣!
      上述就是我的体验手记。总的说来,重庆很适合居住,消费也不高,就是每天要爬上爬下的,怪累人的,那也是重庆的特色了!
posted @ 2009-06-01 11:31 李计刚 阅读(53) 评论(0) 编辑

2009年5月21日

posted @ 2009-05-21 20:42 李计刚 阅读(676) 评论(0) 编辑