public class LineChartHelp
{
#region 折線圖
/// <summary>
/// 建立折線圖
/// </summary>
public void CreateChart(ChartControl chart, DataTable dt, int j, int k)
{
chart.Series.Clear();//清除Series
List<Series> list = new List<Series>();
list.Add(CreateSeries(dt.Columns[j].ColumnName, ViewType.Line, dt, j));
list.Add(CreateSeries(dt.Columns[j + 1].ColumnName, ViewType.Line, dt, j + 1));
list.Add(CreateSeries(dt.Columns[k].ColumnName, ViewType.Line, dt, k));
list.Add(CreateSeries(dt.Columns[k + 1].ColumnName, ViewType.Line, dt, k + 1));orm
SetChart(chart, dt, list, true);
}對象
/// <summary>
/// 建立折線圖
/// </summary>
public void CreateChart(ChartControl chart, DataTable dt, int j = 1)
{
#region Series 建立幾個圖形的對象
chart.Series.Clear();//清除Series
List<Series> list = new List<Series>();
for (int i = j; i < dt.Columns.Count; i++)
{
list.Add(CreateSeries(dt.Columns[i].ColumnName, ViewType.Line, dt, i));
}
#endregion
SetChart(chart, dt, list);
}圖片
private void SetChart(ChartControl chart, DataTable dt, List<Series> list, bool legend = false)
{
chart.Series.AddRange(list.ToArray());
chart.Legend.Visible = false;
chart.SeriesTemplate.LabelsVisibility = DefaultBoolean.True;
SetX(chart);字符串
List<Color> colorList = new List<Color> { Color.Red, Color.YellowGreen, Color.Green, Color.Blue, Color.Tomato, Color.BlueViolet };string
if (((XYDiagram)chart.Diagram).SecondaryAxesY != null)//清空y軸
((XYDiagram)chart.Diagram).SecondaryAxesY.Clear();it
for (int i = 0; i < list.Count; i++)
{
list[i].View.Color = colorList[i];
if(!legend)
CreateAxisY(chart, list[i]);
}
chart.Legend.Visible = legend;
}io
/// <summary>
/// 設置x軸可縮放
/// </summary>
/// <param name="chart1"></param>
private void SetX(ChartControl chart)
{
XYDiagram diagram = (XYDiagram)chart.Diagram;
diagram.EnableAxisXScrolling = true;
diagram.EnableAxisXZooming = true;
}form
/// <summary>
/// 根據數據建立一個圖形展示
/// </summary>
/// <param name="caption">圖形標題</param>
/// <param name="viewType">圖形類型</param>
/// <param name="dt">數據DataTable</param>
/// <param name="rowIndex">圖形數據的行序號</param>
private Series CreateSeries(string caption, ViewType viewType, DataTable dt, int columnsIndex)
{
Series series = new Series(caption, viewType);
for (int i = 0; i < dt.Rows.Count; i++)
{
string argument = dt.Rows[i][0].ToString();//參數名稱
if (string.IsNullOrEmpty(argument)) argument = "未分組";//當x軸參數爲空,顯示未分組
var value = dt.Rows[i][columnsIndex];//參數值
series.Points.Add(new SeriesPoint(argument, value));
}
//必須設置ArgumentScaleType的類型,不然顯示會轉換爲日期格式,致使不是但願的格式顯示
//也就是說,顯示字符串的參數,必須設置類型爲ScaleType.Qualitative
series.ArgumentScaleType = ScaleType.Qualitative;
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//顯示標註標籤
return series;
}class
/// <summary>
/// 建立圖表的第二座標系
/// </summary>
/// <param name="series">Series對象</param>
private SecondaryAxisY CreateAxisY(ChartControl chart, Series series)
{
SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
((XYDiagram)chart.Diagram).SecondaryAxesY.Add(myAxis);
((LineSeriesView)series.View).AxisY = myAxis;
myAxis.Title.Text = series.Name;
myAxis.Title.Alignment = StringAlignment.Far; //頂部對齊
myAxis.Title.Visible = true; //顯示標題
myAxis.Title.Font = new Font("宋體", 9.0f);
Color color = series.View.Color;//設置座標的顏色和圖表線條顏色一致
myAxis.Title.TextColor = color;
myAxis.Label.TextColor = color;
myAxis.Color = color;
return myAxis;
}
#endregionstream
使用aspose導出
public void ToExcelData(DataTable dt, ChartControl chtData, string title)
{
string path = GetPath();
if (string.IsNullOrEmpty(path)) return;
try
{
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Style style2 = workbook.Styles[workbook.Styles.Add()];//新增樣式
style2.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style2.Font.Name = "宋體";
style2.Font.Size = 14;
style2.Font.IsBold = true;
style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
style2.ForegroundColor = System.Drawing.Color.GreenYellow;
style2.Pattern = BackgroundType.Solid;
workbook.Worksheets.Add(title);
int startRow = 0;//寫入數據開始行的下標
Worksheet ws0 = workbook.Worksheets[0];
//寫入到Excel
SetTitlt(workbook, ws0, startRow, title, dt.Columns.Count);
SetCell(startRow + 2, ws0, dt, style2);
//寫入圖注
startRow = dt.Rows.Count + 5;
AddStream(startRow, ws0, chtData);
workbook.Save(path);
if (DevExpress.XtraEditors.XtraMessageBox.Show("保存成功,是否打開文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
System.Diagnostics.Process.Start(path);//打開指定路徑下的文件
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 填充字段
/// </summary>
private void SetCell(int startRow, Worksheet sheet, DataTable dt, Style style2)
{
sheet.Cells[startRow, 0].PutValue("統計報表詳細列表以下:");
//生成字段名稱
for (int i = 0; i < dt.Columns.Count; i++)
{
sheet.Cells[startRow + 1, i].PutValue(dt.Columns[i].ToString());
sheet.Cells[startRow + 1, i].SetStyle(style2);
}
//填充數據
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int column = 0; column < dt.Columns.Count; column++)
{
if (dt.Rows[row][column].GetType() == typeof(string))
{
sheet.Cells[row + startRow + 2, column].PutValue("'" + dt.Rows[row][column].ToString());
}
else
{
sheet.Cells[row + startRow + 2, column].PutValue(dt.Rows[row][column].ToString());
}
}
}
sheet.AutoFitColumns();
}
/// <summary>
/// 設置標題
/// </summary>
private void SetTitlt(Workbook workbook, Worksheet sheet, int startRow, string titlt, int columnsCount)
{
Style style1 = workbook.Styles[workbook.Styles.Add()];//新增樣式
style1.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style1.Font.Name = "宋體";
style1.Font.Size = 20;
style1.Font.IsBold = true;
//style1.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;//應用邊界線 左邊界線
//style1.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //應用邊界線 右邊界線
//style1.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;//應用邊界線 上邊界線
//style1.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;//應用邊界線 下邊界線
sheet.Cells.Merge(startRow, 0, 2, columnsCount);//合併單元格
//sheet.Cells.SetRowHeight(0, 38);//設置行高
//sheet.Cells.SetColumnWidth(0, 25);//設置列寬
sheet.Cells[0, 0].PutValue(titlt);//添加內容
sheet.Cells[0, 0].SetStyle(style1);
}
/// <summary> /// 添加圖片 /// </summary> private void AddStream(int rows, Worksheet worksheet, ChartControl charts) { worksheet.Cells[rows, 0].PutValue("以折線圖展現以下:"); //插入圖片到Excel裏面 using (MemoryStream stream = new MemoryStream()) { stream.Position = 0; ChartControl chart = (ChartControl)charts.Clone(); chart.Size = new Size(1200, 400); chart.ExportToImage(stream, ImageFormat.Png); worksheet.Pictures.Add(rows + 1, 0, stream); } } /// <summary> /// 獲取導出路勁 /// </summary> private string GetPath() { string path = ""; using (SaveFileDialog sfd = new SaveFileDialog()) { sfd.Filter = "Excel文件|*.xlsx"; if (sfd.ShowDialog() == DialogResult.Cancel) { return null; } path += sfd.FileName; } return path; }