[DevExpress]图表开发工具类 ChartUtils V1.0

关键代码:

using DevExpress.Utils;

using DevExpress.XtraCharts;

using System;

using System.Drawing;

using System.Windows.Forms;



namespace DevExpressUtilHelpV3

{

    /// <summary>

    /// 基于.NET 3.5的Chart工具类;对应的DevExpress版本:12.1.7;

    /// </summary>

    public static class ChartUtilsV3

    {



        /// <summary>

        /// 添加基本的Series

        /// </summary>

        /// <param name="chat">ChartControl</param>

        /// <param name="seriesName">Series的名称</param>

        /// <param name="seriesType">Series的类型</param>

        /// <param name="dataSource">Series的绑定数据源</param>

        /// <param name="argumentDataMember">ArgumentDataMember绑定字段名称</param>

        /// <param name="valueDataMembers">ValueDataMembers的绑定字段数组</param>

        /// <param name="visible">Series是否可见</param>

        /// <returns>Series</returns>

        public static Series AddBaseSeries(this ChartControl chat, string seriesName, ViewType seriesType, object dataSource, string argumentDataMember, string[] valueDataMembers, bool visible)

        {

            Series _baseSeries = new Series(seriesName, seriesType);

            _baseSeries.ArgumentDataMember = argumentDataMember;

            _baseSeries.ValueDataMembers.AddRange(valueDataMembers);

            _baseSeries.DataSource = dataSource;

            _baseSeries.Visible = visible;

            chat.Series.Add(_baseSeries);

            return _baseSeries;

        }

        /// <summary>

        /// 设置SeriesTemplate参数

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="dataSource">SeriesTemplate的绑定数据源</param>

        /// <param name="argumentDataMember">ArgumentDataMember绑定字段名称</param>

        /// <param name="valueDataMembers">ValueDataMembers的绑定字段数组</param>

        /// <param name="visible">SeriesTemplate是否可见</param>

        /// <returns>SeriesBase</returns>

        public static SeriesBase SetSeriesTemplate(this ChartControl chart, object dataSource, string argumentDataMember, string[] valueDataMembers, bool visible)

        {

            chart.SeriesTemplate.ValueDataMembers.AddRange(valueDataMembers);

            chart.SeriesTemplate.ArgumentDataMember = argumentDataMember;

            chart.SeriesTemplate.Visible = visible;

            chart.DataSource = dataSource;

            return chart.SeriesTemplate;

        }

        /// <summary>

        /// 增加数据筛选

        /// </summary>

        /// <param name="series">SeriesBase</param>

        /// <param name="columnName">列名称</param>

        /// <param name="value">列名称对应的筛选数值</param>

        /// <param name="dataFilterCondition">DataFilterCondition枚举</param>

        public static void AddDataFilter(this SeriesBase series, string columnName, object value, DataFilterCondition dataFilterCondition)

        {

            series.DataFilters.Add(new DataFilter(columnName, value.GetType().FullName, dataFilterCondition, value));

        }



        /// <summary>

        /// 设置X轴Lable角度

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="angle">角度</param>

        public static void SetXLableAngle(this ChartControl chart, int angle)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _xyDiagram = (XYDiagram)chart.Diagram;

                if (_xyDiagram != null)

                    _xyDiagram.AxisX.Label.Angle = angle;

            }

        }

        /// <summary>

        ///  设置Y轴Lable角度

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="angle">角度</param>

        public static void SetYLableAngle(this ChartControl chart, int angle)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _xyDiagram = (XYDiagram)chart.Diagram;

                _xyDiagram.AxisY.Label.Angle = angle;

            }

        }

        /// <summary>

        /// 设置ColorEach

        /// </summary>

        /// <param name="series">SeriesBase</param>

        /// <param name="colorEach">是否设置成ColorEach</param>

        public static void SetColorEach(this SeriesBase series, bool colorEach)

        {

            SeriesViewColorEachSupportBase colorEachView = (SeriesViewColorEachSupportBase)series.View;

            if (colorEachView != null)

            {

                colorEachView.ColorEach = colorEach;

            }

        }

        /// <summary>

        /// 设置是否显示十字标线

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="crosshair">是否显示十字标线</param>

        public static void SetCrosshair(this ChartControl chart, bool crosshair)

        {

            chart.CrosshairEnabled = crosshair ? DefaultBoolean.True : DefaultBoolean.False;

            chart.CrosshairOptions.ShowArgumentLabels = crosshair;

            chart.CrosshairOptions.ShowArgumentLine = crosshair;

            chart.CrosshairOptions.ShowValueLabels = crosshair;

            chart.CrosshairOptions.ShowValueLine = crosshair;

        }



        /// <summary>

        /// 新增ChartControl的Title文字

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="title">Title文字</param>

        /// <param name="titlePosition">Title位置</param>

        public static void AddTitle(this ChartControl chart, string title, ChartTitleDockStyle titlePosition)

        {

            ChartTitle _chartTitle = new ChartTitle();

            _chartTitle.Text = title;

            _chartTitle.Dock = titlePosition;

            chart.Titles.Add(_chartTitle);

        }

        /// <summary>

        /// 新增ChartControl的Title文字

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="title">Title文字</param>

        /// <param name="visible">是否显示</param>

        /// <param name="titlePosition">Title位置</param>

        public static void AddTitle(this ChartControl chart, string title, bool visible, ChartTitleDockStyle titlePosition)

        {

            ChartTitle _chartTitle = new ChartTitle();

            _chartTitle.Text = title;

            _chartTitle.Visible = visible;

            _chartTitle.Dock = titlePosition;

            chart.Titles.Add(_chartTitle);

        }

        /// <summary>

        /// 先删除Chart的Title,然后添加新的Title

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="title">Title文字</param>

        /// <param name="titlePosition">Title位置</param>

        public static void ClearThenAddTitle(this ChartControl chart, string title, ChartTitleDockStyle titlePosition)

        {

            chart.Titles.Clear();

            ChartTitle _chartTitle = new ChartTitle();

            _chartTitle.Text = title;

            _chartTitle.Dock = titlePosition;

            chart.Titles.Add(_chartTitle);

        }

        /// <summary>

        /// 创建Drill-Down样式的Title

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="title">title文字</param>

        /// <param name="visible">是否可见</param>

        public static void AddDrillDownTitle(this ChartControl chart, string title, bool visible)

        {

            ChartTitle _chartTitle = new ChartTitle();

            _chartTitle.Alignment = StringAlignment.Near;

            _chartTitle.Antialiasing = false;

            _chartTitle.Font = new Font("Tahoma", 10F, FontStyle.Underline);

            _chartTitle.Indent = 20;

            _chartTitle.Text = title;

            _chartTitle.TextColor = Color.RoyalBlue;

            _chartTitle.Visible = false;

            chart.Titles.Add(_chartTitle);

        }

        /// <summary>

        /// 饼状Series设置成百分比显示

        /// </summary>

        /// <param name="series">SeriesBase</param>

        /// <param name="valueLegendType">Series对应Lengend显示类型</param>

        /// <param name="lengendPointView">Series对应Lengend PointView类型</param>

        public static void SetPiePercentage(this SeriesBase series, NumericFormat valueLegendType, PointView lengendPointView)

        {

            if (series.View is PieSeriesView || series.View is Pie3DSeriesView)

            {

                PiePointOptions _piePointOptions = (PiePointOptions)series.Label.PointOptions;

                if (_piePointOptions != null)

                {

                    _piePointOptions.PercentOptions.ValueAsPercent = true;

                    _piePointOptions.ValueNumericOptions.Format = NumericFormat.Percent;

                    _piePointOptions.ValueNumericOptions.Precision = 0;

                    series.LegendPointOptions.ValueNumericOptions.Format = valueLegendType;

                    series.LegendPointOptions.PointView = lengendPointView;

                }

            }

        }

        /// <summary>

        /// Lable格式化设置

        /// 【{A} Use it to display a series point arguments 】

        /// 【{V} Use it to display a series point values】

        /// 【{S} Use it to display the name of the series】

        /// </summary>

        /// <param name="series">SeriesBase</param>

        /// <param name="formatString">Lable格式化设置;【{A}{V}{S}】</param>

        public static void CustomLable(this SeriesBase series, string formatString)

        {

            if (series.LabelsVisibility != DefaultBoolean.True)

                series.LabelsVisibility = DefaultBoolean.True;

            series.Label.PointOptions.Pattern = formatString;

        }

        /// <summary>

        /// 十字标线的Lable格式化设置

        /// 【{A} Use it to display a series point arguments 】

        /// 【{V} Use it to display a series point values】

        /// 【{S} Use it to display the name of the series】

        /// </summary>

        /// <param name="series">SeriesBase</param>

        /// <param name="formatString">CrosshairLabel格式化设置;【{A}{V}{S}】</param>

        public static void CustomCrosshairLabel(this SeriesBase series, string formatString)

        {

            if (series.CrosshairEnabled != DefaultBoolean.True)

                series.CrosshairEnabled = DefaultBoolean.True;

            series.CrosshairLabelPattern = formatString;

        }

        /// <summary>

        /// 将X轴格式化成时间轴

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="dateTimeMeasureUnit">X轴刻度单位</param>

        /// <param name="dateTimeGridAlignment">X轴刻度间距的单位</param>

        public static void SetAxisXTime(this ChartControl chart, DateTimeMeasurementUnit dateTimeMeasureUnit, DateTimeMeasurementUnit dateTimeGridAlignment)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _diagram = (XYDiagram)chart.Diagram;

                if (_diagram != null)

                {

                    _diagram.AxisX.DateTimeMeasureUnit = dateTimeMeasureUnit;//X轴刻度单位

                    _diagram.AxisX.DateTimeGridAlignment = dateTimeGridAlignment;//X轴刻度间距

                }

            }

        }

        /// <summary>

        /// 将X轴格式化成时间轴

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="dateTimeMeasureUnit">X轴刻度单位</param>

        /// <param name="dateTimeGridAlignment">X轴刻度间距的单位</param>

        /// <param name="formatString">时间格式;eg:yyyy-MM</param>

        public static void SetAxisXTime(this ChartControl chart, DateTimeMeasurementUnit dateTimeMeasureUnit, DateTimeMeasurementUnit dateTimeGridAlignment, string formatString)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _diagram = (XYDiagram)chart.Diagram;

                if (_diagram != null)

                {

                    _diagram.AxisX.DateTimeMeasureUnit = dateTimeMeasureUnit;//X轴刻度单位

                    _diagram.AxisX.DateTimeGridAlignment = dateTimeGridAlignment;//X轴刻度间距

                    _diagram.AxisX.DateTimeOptions.Format = DateTimeFormat.Custom;

                    _diagram.AxisX.DateTimeOptions.FormatString = formatString;

                }

            }

        }

        /// <summary>

        /// 设置ChartControl滚动条【默认X,Y轴都出现】

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="backColor">滚动条背景颜色</param>

        /// <param name="barColor">滚动条颜色</param>

        /// <param name="borderColor">滚动条边框颜色</param>

        /// <param name="barThickness">滚动条宽度</param>

        public static ScrollBarOptions SetScrollBar(this ChartControl chart, Color backColor, Color barColor, Color borderColor, int barThickness)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _diagram = (XYDiagram)chart.Diagram;

                if (_diagram != null)

                {

                    _diagram.EnableAxisXScrolling = true;

                    _diagram.EnableAxisYScrolling = true;

                    _diagram.EnableAxisXZooming = true;

                    _diagram.EnableAxisYZooming = true;

                    ScrollBarOptions _scrollBarOptions = _diagram.DefaultPane.ScrollBarOptions;

                    _scrollBarOptions.BackColor = backColor;

                    _scrollBarOptions.BarColor = barColor;

                    _scrollBarOptions.BorderColor = borderColor;

                    _scrollBarOptions.BarThickness = barThickness;

                    return _scrollBarOptions;

                }

            }

            return null;

        }

        /// <summary>

        /// 设置ChartControl X轴滚动条

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="backColor">滚动条背景颜色</param>

        /// <param name="barColor">滚动条颜色</param>

        /// <param name="borderColor">滚动条边框颜色</param>

        /// <param name="barThickness">滚动条宽度</param>

        /// <param name="barAlignment">滚动条位置</param>

        public static void SetAxisXScrollBar(this ChartControl chart, Color backColor, Color barColor, Color borderColor, int barThickness, ScrollBarAlignment barAlignment)

        {

            ScrollBarOptions _scrollBarOptions = SetScrollBar(chart, backColor, barColor, borderColor, barThickness);

            if (_scrollBarOptions != null)

            {

                _scrollBarOptions.XAxisScrollBarAlignment = barAlignment;

                _scrollBarOptions.XAxisScrollBarVisible = true;

                _scrollBarOptions.YAxisScrollBarVisible = false;

            }

        }

        /// <summary>

        /// 设置ChartControl Y轴滚动条

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="backColor">滚动条背景颜色</param>

        /// <param name="barColor">滚动条颜色</param>

        /// <param name="borderColor">滚动条边框颜色</param>

        /// <param name="barThickness">滚动条宽度</param>

        /// <param name="barAlignment">滚动条位置</param>

        public static void SetAxisYScrollBar(this ChartControl chart, Color backColor, Color barColor, Color borderColor, int barThickness, ScrollBarAlignment barAlignment)

        {

            ScrollBarOptions _scrollBarOptions = SetScrollBar(chart, backColor, barColor, borderColor, barThickness);

            if (_scrollBarOptions != null)

            {

                _scrollBarOptions.XAxisScrollBarVisible = false;

                _scrollBarOptions.YAxisScrollBarVisible = true;

                _scrollBarOptions.YAxisScrollBarAlignment = barAlignment;

            }

        }

        /// <summary>

        /// 设置X轴Title

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="titleText">Title文字</param>

        /// <param name="titleColor">Title文字颜色</param>

        public static void SetAxisXTitle(this ChartControl chart, string titleText, Color titleColor)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _diagram = (XYDiagram)chart.Diagram;

                if (_diagram != null)

                {

                    _diagram.AxisX.Title.Visible = true;

                    _diagram.AxisX.Title.Alignment = StringAlignment.Center;

                    _diagram.AxisX.Title.Text = titleText;

                    _diagram.AxisX.Title.TextColor = titleColor;

                    _diagram.AxisX.Title.Antialiasing = true;

                    _diagram.AxisX.Title.Font = new Font("Tahoma", 14, FontStyle.Bold);

                }

            }

        }

        /// <summary>

        /// 设置Y轴Title

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="titleText">Title文字</param>

        /// <param name="titleColor">Title文字颜色</param>

        public static void SetAxisYTitle(this ChartControl chart, string titleText, Color titleColor)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _diagram = (XYDiagram)chart.Diagram;

                if (_diagram != null)

                {

                    _diagram.AxisY.Title.Visible = true;

                    _diagram.AxisY.Title.Alignment = StringAlignment.Center;

                    _diagram.AxisY.Title.Text = titleText;

                    _diagram.AxisY.Title.TextColor = titleColor;

                    _diagram.AxisY.Title.Antialiasing = true;

                    _diagram.AxisY.Title.Font = new Font("Tahoma", 14, FontStyle.Bold);

                }

            }

        }

        /// <summary>

        /// 创建基准线ConstantLine

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="ctAxisValue">基准线数值</param>

        /// <param name="ctLegendText">基准线图例文字</param>

        /// <param name="ctTitle">基准线文字</param>

        /// <param name="ctTitleColor">基准线字体颜色</param>

        /// <param name="ctLineColor">基准线颜色</param>

        /// <param name="ctLineStyle">基准线样式</param>

        public static void CreateConstantLine(this ChartControl chart, int ctAxisValue, string ctLegendText, string ctTitle, Color ctTitleColor, Color ctLineColor, DashStyle ctLineStyle)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _diagram = (XYDiagram)chart.Diagram;

                if (_diagram != null)

                {

                    ConstantLine _ctLine = new ConstantLine();



                    _ctLine.AxisValue = ctAxisValue;

                    _ctLine.Visible = true;

                    _ctLine.ShowInLegend = true;

                    _ctLine.LegendText = ctLegendText;

                    _ctLine.ShowBehind = false;



                    _ctLine.Title.Visible = true;

                    _ctLine.Title.Text = ctTitle;

                    _ctLine.Title.TextColor = ctTitleColor;

                    _ctLine.Title.Antialiasing = false;

                    _ctLine.Title.Font = new Font("Tahoma", 14, FontStyle.Bold);

                    _ctLine.Title.ShowBelowLine = true;

                    _ctLine.Title.Alignment = ConstantLineTitleAlignment.Far;



                    _ctLine.Color = ctLineColor;

                    _ctLine.LineStyle.DashStyle = ctLineStyle;

                    _ctLine.LineStyle.Thickness = 2;



                    _diagram.AxisY.ConstantLines.Add(_ctLine);

                }

            }

        }

        /// <summary>

        /// 创建Strip

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="strip">Strip</param>

        /// <param name="stripLable">Strip文字</param>

        /// <param name="stripLengend">Strip对应的Lengend文字</param>

        /// <param name="stripColor">Strip颜色</param>

        /// <param name="stripStyle">Strip填充样式</param>

        public static void CreateStrip(this ChartControl chart, Strip strip, string stripLable, string stripLengend, Color stripColor, FillMode stripStyle)

        {

            if (chart.Diagram is XYDiagram)

            {

                XYDiagram _diagram = (XYDiagram)chart.Diagram;

                if (_diagram != null && strip != null)

                {

                    _diagram.AxisY.Strips.Add(strip);



                    _diagram.AxisY.Strips[0].Visible = true;

                    _diagram.AxisY.Strips[0].ShowAxisLabel = true;

                    _diagram.AxisY.Strips[0].AxisLabelText = stripLable;

                    _diagram.AxisY.Strips[0].ShowInLegend = true;

                    _diagram.AxisY.Strips[0].LegendText = stripLengend;



                    _diagram.AxisY.Strips[0].Color = stripColor;

                    _diagram.AxisY.Strips[0].FillStyle.FillMode = stripStyle;

                }

            }

        }

        /// <summary>

        /// 自定义ChartControl的Tooltip

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="e">MouseEventArgs</param>

        /// <param name="tooltip">ToolTipController</param>

        /// <param name="tooltipTitle">ToolTipController的Title</param>

        /// <param name="paramter">委托</param>

        public static void CustomToolTip(this ChartControl chart, MouseEventArgs e, ToolTipController tooltip, string tooltipTitle, System.Func<string, double[], string> paramter)

        {

            ChartHitInfo _hitInfo = chart.CalcHitInfo(e.X, e.Y);

            SeriesPoint _point = _hitInfo.SeriesPoint;

            if (_point != null)

            {

                string _msg = paramter(_point.Argument, _point.Values);

                tooltip.ShowHint(_msg, tooltipTitle);

            }

            else

            {

                tooltip.HideHint();

            }

        }

        /// <summary>

        /// 设置Legend位于底部并居中

        /// </summary>

        /// <param name="legend">Legend</param>

        public static void SetBottomCenter(this Legend legend)

        {

            legend.Direction = LegendDirection.LeftToRight;

            legend.AlignmentHorizontal = LegendAlignmentHorizontal.Center;

            legend.AlignmentVertical = LegendAlignmentVertical.BottomOutside;

        }

        /// <summary>

        /// 设置饼状图的Lable位置

        /// </summary>

        /// <param name="series">SeriesBase</param>

        /// <param name="lablePosition">PieSeriesLabelPosition枚举</param>

        public static void SetLablePosition(this SeriesBase series, PieSeriesLabelPosition lablePosition)

        {

            if (series.Label is PieSeriesLabel)

            {

                PieSeriesLabel _label = series.Label as PieSeriesLabel;

                _label.Position = lablePosition;

            }

            //if (series.Label is Pie3DSeriesLabel)

            //{

            //    Pie3DSeriesLabel _label = series.Label as Pie3DSeriesLabel;

            //    _label.Position = lablePosition;

            //}

        }

        /// <summary>

        /// 饼状图突出设置

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="pieSeries">Series【仅仅适用于PieSeriesView】</param>

        /// <param name="explodeMode">突出模式【枚举】</param>

        /// <param name="explodedValue">突出间距</param>

        /// <param name="dragPie">是否可以拖动突出饼状</param>

        public static void SetPieExplode(this ChartControl chart, SeriesBase pieSeries, PieExplodeMode explodeMode, int explodedValue, bool dragPie)

        {

            if (pieSeries.View is PieSeriesView)

            {

                if (!chart.RuntimeHitTesting)

                    chart.RuntimeHitTesting = true;



                PieSeriesView _pieView = pieSeries.View as PieSeriesView;

                _pieView.ExplodeMode = explodeMode;

                _pieView.ExplodedDistancePercentage = explodedValue;

                _pieView.RuntimeExploding = dragPie;

            }

        }

        /// <summary>

        /// chart钻取实现【在MouseClick事件中实现】

        /// </summary>

        /// <param name="chart">ChartControl</param>

        /// <param name="e">MouseEventArgs</param>

        /// <param name="backKeyWord">返回主Series的关键字</param>

        /// <param name="gotoHandler">向下钻取委托</param>

        /// <param name="backHandler">返回主Series的委托</param>

        public static void DrillDownHelper(this ChartControl chart, MouseEventArgs e, string backKeyWord, Action<SeriesPoint> gotoHandler, Action<SeriesPoint> backHandler)

        {

            //eg:

            //private void chartLh_MouseClick(object sender, MouseEventArgs e)

            //{

            //    ChartControl _curChart = sender as ChartControl;

            //    _curChart.DrillDownHelper(

            //        e,

            //        "返回",

            //        point =>

            //        {

            //            string _argument = point.Argument.ToString();

            //            if (_curChart.Series["pieSeries"].Visible)

            //            {

            //                _curChart.Series["pieSeries"].Visible = false;

            //                _curChart.SeriesTemplate.Visible = true;

            //                if (_curChart.SeriesTemplate.DataFilters.Count == 0)

            //                    _curChart.SeriesTemplate.AddDataFilter("categoryName", _argument, DataFilterCondition.Equal);

            //                else

            //                    _curChart.SeriesTemplate.DataFilters[0].Value = _argument;

            //                _curChart.Titles[1].Visible = true;

            //                _curChart.Titles[0].Visible = false;

            //            }

            //        },

            //        point =>

            //        {

            //            _curChart.Titles[0].Visible = true;

            //            _curChart.Series["pieSeries"].Visible = true;

            //            _curChart.SeriesTemplate.Visible = false;

            //        });

            //}

            ChartHitInfo _hitInfo = chart.CalcHitInfo(e.X, e.Y);

            SeriesPoint _point = _hitInfo.SeriesPoint;

            if (_point != null)

            {

                gotoHandler(_point);

            }

            ChartTitle link = _hitInfo.ChartTitle;

            if (link != null && link.Text.StartsWith(backKeyWord))

            {

                link.Visible = false;

                backHandler(_point);

            }

        }

    }

}

你可能感兴趣的:(DevExpress)