C#中dotnetcharting的用法实例详解

本文以实例形式详细讲述了dotnetcharting控件的用法。分享给大家供大家参考。具体用法分析如下:

dotnetcharting 是一个很好用的图表控件,能画出很漂亮的报表,一般常用到的主要有柱状图、饼图、折线图三种。
dotnetcharting 有web版、winform版多个版本可供使用,官方网址:http://www.dotnetcharting.com/ ,官网有很多示例(http://www.dotnetcharting.com/gallery/),而且有winform安装版示例和代码,如下图。
dotnetcharting 有网上破解版的,去百度或谷歌一搜一堆。
说下个人感受,该控件是国外开发的,虽然说这个控件挺好用的,但是感觉这个控件应该在有xp系统的时候就应该有了吧?是国外剩下的技术,咱们一直在用别人不用的技术,捧为珍宝。
有些技术有些人,有些本事就开始自大起来,小有成就的那点技术还藏着掖着。 呵呵。。。

 

接下来上干货,前两天刚使用dotnetcharting 做了个统计报表,代码如下:
 

using System;

using System.Collections.Generic;

using System.Data;

using System.Drawing;

using dotnetCHARTING.WinForms;

using StationChart.Model;

using StationChart.Utility;

using Chart = dotnetCHARTING.WinForms.Chart;

using Series = dotnetCHARTING.WinForms.Series;

using SeriesCollection = dotnetCHARTING.WinForms.SeriesCollection;

 

namespace ManageSystem

{

    // <summary>

    // 作者:薛江涛

    // 版本:V1.0.0

    // 时间:2014/10/9 11:49:48

    // </summary>

    public class ShowData

    {

        #region 属性

        private string _phaysicalimagepath;//图片存放路径

        private string _xtitle;//图片x座标名称

        private string _ytitle;//图片y座标名称

        private string _seriesname;//图例名称

        private int _picwidth;//图片宽度

        private int _pichight;//图片高度

        private DataTable _dt;//图片数据源

        private DataSet _ds;//图片数据源

 

        private Color _titleBoxColor;//图片标题背景色

        private Font _titleBoxFont;//图片标题字体

        private Color _chartAreaBackgroundColor;//图片背景颜色

        private Font _xAxisLabelFont;//X轴柱状图值字体

        private Font _yAxisLabelFont;//Y轴柱状图值字体

        private Font _xAxisDefaultTickLabelFont;//X轴刻度字体

        private Font _yAxisDefaultTickLabelFont;//Y轴刻度字体

        private SeriesType _chartDefaultSeriesType;//图片类型

        private ChartType _chartType;//图片类型

        //private bool _isMonth; //是否是月显示

        private int _staticColumnWidth;//设置柱状图每个单元格的宽度

        private int _numberPercision;//设置数值小数点

 

        /// <summary>

        /// 图片存放路径

        /// </summary>

        public string PhaysicalImagePath

        {

            set { _phaysicalimagepath = value; }

            get { return _phaysicalimagepath; }

        }

 

        /// <summary>

        /// 图片标题

        /// </summary>

        public string Title { get; set; }

 

        /// <summary>

        /// 图片标题

        /// </summary>

        public string XTitle

        {

            set { _xtitle = value; }

            get { return _xtitle; }

        }

        /// <summary>

        /// 图片标题

        /// </summary>

        public string YTitle

        {

            set { _ytitle = value; }

            get { return _ytitle; }

        }

 

        /// <summary>

        /// 图例名称

        /// </summary>

        public string SeriesName

        {

            set { _seriesname = value; }

            get { return _seriesname; }

        }

        /// <summary>

        /// 图片宽度

        /// </summary>

        public int PicWidth

        {

            set { _picwidth = value; }

            get { return _picwidth; }

        }

        /// <summary>

        /// 图片高度

        /// </summary>

        public int PicHight

        {

            set { _pichight = value; }

            get { return _pichight; }

        }

        /// <summary>

        /// 图片数据源

        /// </summary>

        public DataTable DataSource

        {

            set { _dt = value; }

            get { return _dt; }

        }

        /// <summary>

        /// 图片数据源

        /// </summary>

        public DataSet DataSetSource

        {

            set { _ds = value; }

            get { return _ds; }

        }

 

        public int NumberPercision

        {

            set { _numberPercision = value; }

            get { return _numberPercision; }

        }

 

        public Color TitleBoxColor

        {

            get { return _titleBoxColor; }

            set { _titleBoxColor = value; }

        }

 

        public Font TitleBoxFont

        {

            get { return _titleBoxFont; }

            set { _titleBoxFont = value; }

        }

 

        public Color ChartAreaBackgroundColor

        {

            get { return _chartAreaBackgroundColor; }

            set { _chartAreaBackgroundColor = value; }

        }

 

        public Font XAxisLabelFont

        {

            get { return _xAxisLabelFont; }

            set { _xAxisLabelFont = value; }

        }

 

        public Font YAxisLabelFont

        {

            get { return _yAxisLabelFont; }

            set { _yAxisLabelFont = value; }

        }

 

        public Font XAxisDefaultTickLabelFont

        {

            get { return _xAxisDefaultTickLabelFont; }

            set { _xAxisDefaultTickLabelFont = value; }

        }

 

        public Font YAxisDefaultTickLabelFont

        {

            get { return _yAxisDefaultTickLabelFont; }

            set { _yAxisDefaultTickLabelFont = value; }

        }

 

        public SeriesType ChartDefaultSeriesType

        {

            get { return _chartDefaultSeriesType; }

            set { _chartDefaultSeriesType = value; }

        }

 

        public ChartType ChartType

        {

            get { return _chartType; }

            set { _chartType = value; }

        }

 

        //public bool IsMonth

        //{

        // get { return _isMonth; }

        // set { _isMonth = value; }

        //}

 

 

        public ModelConseme.DateChartEnum SeriesTypeE { get; set; }

 

        public int StaticColumnWidth

        {

            get { return _staticColumnWidth; }

            set { _staticColumnWidth = value; }

        }

 

        #endregion

 

        #region 构造函数

        public ShowData()

        {

            //

            // TODO: 在此处添加构造函数逻辑

            //

            NumberPercision = 2;

        }

 

        public ShowData(string phaysicalImagePath, string title, string xTitle, string yTitle, string seriesName)

        {

            _phaysicalimagepath = phaysicalImagePath;

            Title = title;

            _xtitle = xTitle;

            _ytitle = yTitle;

            _seriesname = seriesName;

        }

        #endregion

 

        private static readonly object ThisLock = new object();

 

        #region 输出柱形图

        /// <summary>

        /// 柱形图

        /// </summary>

        /// <returns></returns>

        public void CreateColumn(Chart chart)

        {

            try

            {

                //清空图片

                chart.SeriesCollection.Clear();

                //标题框设置

                //标题的颜色

                chart.TitleBox.Label.Color = _titleBoxColor;

                //标题字体设置

                chart.TitleBox.Label.Font = _titleBoxFont;

 

                //控制柱状图颜色

                chart.ShadingEffectMode = ShadingEffectMode.One;

 

                chart.TitleBox.Position = TitleBoxPosition.None;

 

                //图表背景颜色

                chart.ChartArea.Background.Color = ChartAreaBackgroundColor;

                //1.图表类型

                chart.DefaultSeries.Type = _chartDefaultSeriesType;// SeriesType.Column;

                //chart.DefaultSeries.Type = SeriesType.Cylinder;

                //2.图表类型

                //柱状图

                //chart.Type = ChartType.TreeMap;

                ////横向柱状图

                chart.Type = _chartType;// ChartType.ComboHorizontal

                ////横向柱状图

                //chart.Type =_chartType;// ChartType.Gantt;

                ////饼状图

                //chart.Type = ChartType.Pies;

 

                //y轴图表阴影颜色

                //chart.YAxis.AlternateGridBackground.Color = Color.FromArgb(255, 250, 250, 250);

                chart.LegendBox.HeaderLabel = new Label("图表说明", new Font("Microsoft Sans Serif", 10F, FontStyle.Bold, GraphicsUnit.Point, 134));

                //chart.LegendBox.HeaderLabel.Font = new Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134);

                chart.LegendBox.Label.Font = new Font("Microsoft Sans Serif", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);

                chart.Palette = new Color[] { Color.FromArgb(0, 156, 255), Color.FromArgb(255, 99, 49), Color.FromArgb(49, 255, 49), Color.FromArgb(255, 255, 0), };

 

                chart.Title = Title;

                //X轴柱状图值字体

                chart.XAxis.Label.Text = _xtitle;

                chart.XAxis.Label.Font = _xAxisLabelFont;

                //设置X轴刻度值说明字体

                chart.XAxis.DefaultTick.Label.Font = _xAxisDefaultTickLabelFont;

 

                chart.XAxis.StaticColumnWidth = _staticColumnWidth; //每个单元格的宽度

 

 

                //Y轴柱状图值字体

                chart.YAxis.Label.Text = _ytitle;

                chart.YAxis.Label.Font = _yAxisLabelFont;

                //设置Y轴刻度值说明字体

                chart.YAxis.DefaultTick.Label.Font = _yAxisDefaultTickLabelFont;

 

                //Y轴箭头标示

                chart.XAxis.Name = XTitle;

                if (_chartType == ChartType.ComboHorizontal)

                {

                    chart.XAxis.TickLabelPadding = 10;

                    chart.XAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;

                    chart.XAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;

                    chart.XAxis.Line.Width = 5;//箭头宽度

                    chart.XAxis.Line.Color = Color.Gray;

                }

                else

                {

                    chart.YAxis.TickLabelPadding = 10;

                    chart.YAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;

                    chart.YAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;

                    chart.YAxis.Line.Width = 5;//箭头宽度

                    chart.YAxis.Line.Color = Color.Gray;

                    //显示值格式化(小数点显示几位)

                    chart.YAxis.NumberPercision = _numberPercision;

                }

 

                //图片存放路径

                chart.TempDirectory = System.Environment.CurrentDirectory + "\\" + _phaysicalimagepath;

                //图表宽度

                chart.Width = _picwidth;

                //图表高度

                chart.Height = _pichight;

                chart.Series.Name = _seriesname;

                //单一图形

                //chart.Series.Data = _dt;

                //chart.SeriesCollection.Add();

 

                //图例在标题行显示,但是没有合计信息

                //chart.TitleBox.Position = TitleBoxPosition.FullWithLegend;

                //chart.TitleBox.Label.Alignment = StringAlignment.Center;

                //chart.LegendBox.Position = LegendBoxPosition.None; //不显示图例,指不在右侧显示,对上面一行的属性设置并没有影响

 

                chart.DefaultSeries.DefaultElement.ShowValue = true;

                chart.ShadingEffect = true;

                chart.Use3D = false;

                chart.Series.DefaultElement.ShowValue = true;

                chart.SeriesCollection.Add(GetArrayData());

 

            }

            catch (Exception ex)

            {

                LogHelper.WriteErrorLog(ex.ToString(), ex);

            }

        }

 

        /// <summary>

        /// 柱形图

        /// </summary>

        /// <returns></returns>

        public void CreateColumn(Chart chart, List<int> list)

        {

            try

            {

                chart.SeriesCollection.Clear();

                //标题框设置

                //标题的颜色

                chart.TitleBox.Label.Color = _titleBoxColor;

                //标题字体设置

                chart.TitleBox.Label.Font = _titleBoxFont;

 

                //控制柱状图颜色

                chart.ShadingEffectMode = ShadingEffectMode.Five;

                //图表背景颜色

                chart.ChartArea.Background.Color = ChartAreaBackgroundColor;

 

 

                //1.图表类型

                chart.DefaultSeries.Type = _chartDefaultSeriesType;// SeriesType.Column;

                //chart.DefaultSeries.Type = SeriesType.Cylinder;

                //2.图表类型

                //柱状图

                //chart.Type = ChartType.TreeMap;

                ////横向柱状图

                chart.Type = _chartType;// ChartType.ComboHorizontal

                ////横向柱状图

                //chart.Type =_chartType;// ChartType.Gantt;

                ////饼状图

                //chart.Type = ChartType.Pies;

 

                //y轴图表阴影颜色

                //chart.YAxis.AlternateGridBackground.Color = Color.FromArgb(255, 250, 250, 250);

                chart.LegendBox.HeaderLabel = new Label("图表说明", new Font("Microsoft Sans Serif", 10F, FontStyle.Bold, GraphicsUnit.Point, 134));

                //chart.LegendBox.HeaderLabel.Font = new Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134);

                chart.LegendBox.Label.Font = new Font("Microsoft Sans Serif", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);

                chart.Palette = new Color[] { Color.FromArgb(0, 156, 255), Color.FromArgb(255, 99, 49), Color.FromArgb(49, 255, 49), Color.FromArgb(255, 255, 0), };

 

                chart.Title = Title;

                //X轴柱状图值字体

                chart.XAxis.Label.Text = _xtitle;

                chart.XAxis.Label.Font = _xAxisLabelFont;

                //设置X轴刻度值说明字体

                chart.XAxis.DefaultTick.Label.Font = _xAxisDefaultTickLabelFont;

 

                chart.XAxis.StaticColumnWidth = _staticColumnWidth; //每个单元格的宽度

 

 

                //Y轴柱状图值字体

                chart.YAxis.Label.Text = _ytitle;

                chart.YAxis.Label.Font = _yAxisLabelFont;

                //设置Y轴刻度值说明字体

                chart.YAxis.DefaultTick.Label.Font = _yAxisDefaultTickLabelFont;

 

                //Y轴箭头标示

                chart.XAxis.Name = XTitle;

                if (_chartType == dotnetCHARTING.WinForms.ChartType.ComboHorizontal)

                {

                    chart.XAxis.TickLabelPadding = 10;

                    chart.XAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;

                    chart.XAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;

                    chart.XAxis.Line.Width = 5;//箭头宽度

                    chart.XAxis.Line.Color = Color.Gray;

                }

                else

                {

                    chart.YAxis.TickLabelPadding = 10;

                    chart.YAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;

                    chart.YAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;

                    chart.YAxis.Line.Width = 5;//箭头宽度

                    chart.YAxis.Line.Color = Color.Gray;

                    //显示值格式化(小数点显示几位)

                    chart.YAxis.NumberPercision = _numberPercision;

                }

 

                //图片存放路径

                chart.TempDirectory = System.Environment.CurrentDirectory + "\\" + _phaysicalimagepath;

                //图表宽度

                chart.Width = _picwidth;

                //图表高度

                chart.Height = _pichight;

                chart.Series.Name = _seriesname;

                //单一图形

                //chart.Series.Data = _dt;

                //chart.SeriesCollection.Add();

 

                //图例在标题行显示,但是没有合计信息

                //chart.TitleBox.Position = TitleBoxPosition.FullWithLegend;

                //chart.TitleBox.Label.Alignment = StringAlignment.Center;

                //chart.LegendBox.Position = LegendBoxPosition.None; //不显示图例,指不在右侧显示,对上面一行的属性设置并没有影响

 

                chart.DefaultSeries.DefaultElement.ShowValue = true;

                chart.ShadingEffect = true;

                chart.Use3D = false;

                chart.Series.DefaultElement.ShowValue = true;

 

 

                chart.SeriesCollection.Add(GetArrayData(list));

 

            }

            catch (Exception ex)

            {

 

                LogHelper.WriteErrorLog(ex.ToString(), ex);

            }

        }

 

 

        ///// <summary>

        ///// 柱形图,单一图片

        ///// </summary>

        ///// <returns></returns>

        //public void CreateColumn(Chart chart1)

        //{

        // Chart1.Title = _title;

        // Chart1.XAxis.Label.Text = _xtitle;

        // Chart1.YAxis.Label.Text = _ytitle;

        // Chart1.TempDirectory = PhaysicalImagePath;

        // Chart1.Width = _picwidth;

        // Chart1.Height = _pichight;

        // Chart1.Type = ChartType.Combo;

 

        // Chart1.Series.Type = SeriesType.Cylinder;

        // Chart1.Series.Name = _seriesname;

        // Chart1.Series.Data = _dt;

        // Chart1.SeriesCollection.Add();

        // Chart1.DefaultSeries.DefaultElement.ShowValue = true;

        // Chart1.ShadingEffect = true;

        // Chart1.Use3D = false;

        // Chart1.Series.DefaultElement.ShowValue = true;

        //}

 

        #endregion

 

        #region 输出饼图

        /// <summary>

        /// 饼图

        /// </summary>

        /// <returns></returns>

        public void CreatePie(Chart chart)

        {

            try

            {

 

                chart.SeriesCollection.Clear();

                //控制饼图颜色

                chart.ShadingEffectMode = ShadingEffectMode.Two;

 

                chart.TitleBox.Position = TitleBoxPosition.None;

                chart.Title = Title;

                //标题的颜色

                chart.TitleBox.Label.Color = _titleBoxColor;

                //标题字体设置

                chart.TitleBox.Label.Font = _titleBoxFont;

 

                //图表说明

                chart.LegendBox.HeaderLabel = new dotnetCHARTING.WinForms.Label("图表说明", new Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134));

                //chart.LegendBox.HeaderLabel.Font = new Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134);

                chart.LegendBox.Label.Font = new Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134);

                chart.Palette = new Color[] { Color.FromArgb(0, 156, 255), Color.FromArgb(255, 99, 49), Color.FromArgb(49, 255, 49), Color.FromArgb(255, 255, 0), };

 

 

                chart.Title = Title;

                //X轴柱状图值字体

                chart.XAxis.Label.Text = _xtitle;

                chart.XAxis.Label.Font = _xAxisLabelFont;

                //设置X轴刻度值说明字体

                chart.XAxis.DefaultTick.Label.Font = _xAxisDefaultTickLabelFont;

                chart.XAxis.Label.Text = _xtitle;

                chart.YAxis.Label.Text = _ytitle;

                chart.TempDirectory = _phaysicalimagepath;

                chart.Width = _picwidth;

                chart.Height = _pichight;

                chart.Type = ChartType.Pie;

                chart.Series.Type = SeriesType.Cylinder;

                chart.Series.Name = _seriesname;

                chart.YAxis.NumberPercision = _numberPercision;

 

                chart.ShadingEffect = true;

                chart.Use3D = false;

                chart.DefaultSeries.DefaultElement.Transparency = 20;//线条透明度

                chart.DefaultSeries.DefaultElement.ShowValue = true;

                chart.PieLabelMode = dotnetCHARTING.WinForms.PieLabelMode.Outside;

                chart.SeriesCollection.Add(GetPieArrayData());

                chart.Series.DefaultElement.ShowValue = true;

 

            }

            catch (Exception ex)

            {

                LogHelper.WriteErrorLog(ex.ToString(), ex);

            }

        }

 

        #region 输出曲线图

        /// <summary>

        /// 曲线图,昨日今日对比

        /// </summary>

        /// <returns></returns>

        public void CreateLine(Chart chart)

        {

            try

            {

                chart.SeriesCollection.Clear();

 

                chart.TitleBox.Position = TitleBoxPosition.None;

                //标题的颜色

                chart.TitleBox.Label.Color = _titleBoxColor;

                //标题字体设置

                chart.TitleBox.Label.Font = _titleBoxFont;

                //图表背景颜色

                chart.ChartArea.Background.Color = ChartAreaBackgroundColor;

 

                //X轴柱状图值字体

                chart.XAxis.Label.Font = _xAxisLabelFont;

                //设置X轴刻度值说明字体

                chart.XAxis.DefaultTick.Label.Font = _xAxisDefaultTickLabelFont;

 

                //Y轴柱状图值字体

                chart.YAxis.Label.Font = _yAxisLabelFont;

                //设置Y轴刻度值说明字体

                chart.YAxis.DefaultTick.Label.Font = _yAxisDefaultTickLabelFont;

 

                //Y轴箭头标示

                chart.YAxis.TickLabelPadding = 0;

                chart.YAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;

                chart.YAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;

                chart.YAxis.Line.Width = 5;//箭头宽度

                chart.YAxis.Line.Color = Color.Gray;

 

                chart.Title = Title;

                chart.XAxis.Label.Text = _xtitle;

                chart.YAxis.Label.Text = _ytitle;

                chart.TempDirectory = _phaysicalimagepath;

                // Set the size

                chart.Width = _picwidth;

                chart.Height = _pichight;

                // Set the temp directory

                chart.TempDirectory = "temp";

                // Debug mode. ( Will show generated errors if any )

                chart.Debug = true;

                chart.Type = ChartType.Combo;

                chart.DefaultSeries.Type = SeriesType.Line;

                //chart.Series.Type = SeriesType.Line;

                chart.Series.Name = _seriesname;

                chart.DefaultSeries.DefaultElement.ShowValue = false;

                chart.ShadingEffect = true;

                chart.Use3D = false;

                chart.Series.DefaultElement.ShowValue = true;

                chart.DefaultSeries.DefaultElement.Transparency = 20;//线条透明度

                chart.DateGrouping = TimeInterval.Day;

                ////显示值格式化(小数点显示几位)

                chart.YAxis.NumberPercision = _numberPercision;

 

                chart.OverlapFooter = false;

 

                SeriesCollection mySC = GetRandomData();

                mySC[0].DefaultElement.Color = Color.FromArgb(255, 99, 49);

                mySC[1].DefaultElement.Color = Color.FromArgb(0, 156, 255);

 

                // Add the random data.

                chart.SeriesCollection.Add(mySC);

            }

            catch (Exception ex)

            {

                LogHelper.WriteErrorLog(ex.ToString(), ex);

            }

        }

        #endregion

 

        /// <summary>

        /// 曲线图

        /// </summary>

        /// <returns></returns>

        SeriesCollection GetRandomData()

        {

            SeriesCollection sc = new SeriesCollection();

            try

            {

                DataTable dt = _dt;

 

                var s = new Series();

                var s2 = new Series();

 

                switch (SeriesTypeE)

                {

                    case ModelConseme.DateChartEnum.DayChart:

                        for (int i = 0; i < 24; i++)

                        {

                            s.Name = "今天";

                            s2.Name = "昨天";

                            Element e = new Element();

                            // 每元素的名称

                            e.Name = (i).ToString();

                            // 每元素的大小数值

                            e.YValue = 0;

 

                            Element e2 = new Element();

                            // 每元素的名称

                            e2.Name = (i).ToString();

                            // 每元素的大小数值

                            e2.YValue = 0;

 

                            s.Elements.Add(e);

                            s2.Elements.Add(e2);

                            sc.Add(s);

                            sc.Add(s2);

                        }

 

                        for (int i = 0; i < dt.Rows.Count; i++)

                        {

                            string sodayHH = dt.Rows[i][1].ToString();

                            string today = dt.Rows[i][1].ToString().Substring(0, 10);

                            int HH = Convert.ToInt32(sodayHH.Substring(11));

                            if (DateTime.Now.ToString("yyyy-MM-dd").Equals(today))

                            {

                                sc[0].Elements[HH].YValue = Convert.ToDouble(dt.Rows[i][2].ToString());

                            }

                            else

                            {

                                sc[1].Elements[HH].YValue = Convert.ToDouble(dt.Rows[i][2].ToString());

                            }

                        }

                        break;

                    case ModelConseme.DateChartEnum.MonthChart:

                        for (int i = 1; i < 32; i++)

                        {

                            s.Name = "本月";

                            s2.Name = "上月";

                            var e = new Element();

                            // 每元素的名称

                            e.Name = (i).ToString();

                       &n