上一篇讲了利用.NET存储Excel表格的思路,C#存储Excel表格,在将Excel表格存储到数据库后,我们可以利用C#控件将存储的Excel做一个美观的展示与分析,众多WinForm控件里比较适合展示Excel表格的也就是Datagridview和Chart了。DataGridview展示Excel表格的效果如下:
图1.DataGridview显示Excel表格
具体步骤为使用SqlConnection对象连接数据库后,建立SqlCommand对象,执行“SELECT * FROM 表”读取整张表的数据保存在DataSet中,然后制定DataGridview数据源为DataSet即可。
strtable = cmbName.Text + "$" + cmbYear.Text;
DataTable dt1 = new DataTable();
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from " + strtable;
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt1);
dgvtable.DataSource = dt1;
}
}
}
Chart控件展示Excel则更加灵活,可以通过数据线Series绘制,它可以是折线也可以是其他不同的样式,可以通过设置标题、样式、图例以及位置等与Excel表格任意两列联动,部分代码及注释如下。
//标题内容
title.Text = "监测指标年内动态分析图";
//标题的字体
title.Font = new System.Drawing.Font("Microsoft Sans Serif", 12, FontStyle.Bold);
//标题字体颜色
title.ForeColor = Color.FromArgb(26, 59, 105);
//标题阴影颜色
title.ShadowColor = Color.FromArgb(32, 0, 0, 0);
//标题阴影偏移量
title.ShadowOffset = 2;
chart1.Titles.Add(title);
//Excel规定两列的列导入到Char中
string strtable = "dbo." + + monitor + "$" + year ;
chart1.Series.Clear();
string strsql1 = "select 监测日期," + indicator + " from " + monitor + "$" + year ;
SqlCommand cmd = new SqlCommand(strsql1, con);
cmd.Connection.Open();
SqlDataReader myreader = cmd.ExecuteReader();
chart1.DataBindTable(myreader, "监测日期");
myreader.Close();
//需要设置横坐标的间隔和偏移都为1,不然坐标多了会显示不全
chart1.Titles[0].Text = cmbYear.Text.ToString() + "年" + cmbMonitor.Text.ToString() + cmbIndicators.Text.ToString() + "变化分析";
chart1.ChartAreas[0].AxisX.Interval = 1;
chart1.ChartAreas[0].AxisX.IntervalOffset = 1;
chart1.ChartAreas[0].AxisX.LabelStyle.IsStaggered = false;
chart1.ChartAreas[0].AxisY.Title = cmbIndicators.Text.ToString() + "监测值(mg/L)";
chart1.ChartAreas[0].AxisX.Title = "监测时间(月份)";
//设置显示样式--线性
MarkerStyle marker = MarkerStyle.Square;
foreach (Series ser in chart1.Series)
{
ser.ShadowOffset = 1;
ser.BorderWidth = 1;
ser.ChartType = SeriesChartType.Line;
ser.MarkerSize = 12;
ser.MarkerStyle = marker;
ser.Font = new Font("Trebuchet MS", 8, FontStyle.Regular);
ser.ToolTip = "监测日期:#VALX\n监测值:#VAL";
marker++;
}
//图例显示位置
chart1.Legends[0].Alignment = StringAlignment.Center;
chart1.Legends[0].Docking = Docking.Bottom;
//关闭数据库
con.Close();
图2.Char展示Excel效果