//中心業務平台的“熱門崗位信息監測”柱狀圖
public partial class HotJobInfo : UserControl
{
private object _objLock = new object();
private delegate void getDataHandler();
/// <summary>
/// 熱門崗位數據
/// </summary>
private BarGraghData _barGraghData = null;
public HotJobInfo()
{
InitializeComponent();
//獲取熱門崗位數據
//異步獲取數據,繪制圖表
getDataHandler handler = new getDataHandler(GetHotJobDataInfo);
IAsyncResult result = handler.BeginInvoke(new AsyncCallback(showLine), "AsycState:OK");
}
private void showLine(IAsyncResult result)
{
try
{
this.Invoke(
new Action(
delegate
{
//繪制圖表
ToLineGragh();
}));
}
catch { }
}
/// <summary>
/// 獲取熱門崗位信息數據
/// </summary>
private void GetHotJobDataInfo()
{
try
{
lock (_objLock)
{
//向服務器請求數據
Random ran = new Random();
int sjd = ran.Next(1, 1000);
string addr = ConfigurationManager.AppSettings["ServiceAddr"].ToString();
//去掉地址結尾的'/',否則請求中會出現兩個'/',而導致請求失敗
string url = string.Format(@"{0}/JobInfoCheck/GetHotJob", addr[addr.Length - 1] != '/' ? addr : addr.Substring(0, addr.Length - 1));
string response = Utility.HttpResult.GetHttpRequest(url, sjd.ToString());
BarGraghDataJson result = Utility.JsonHelper.JsonDeserialize<BarGraghDataJson>(response);
if (result.IsOK)
{
BarGraghData data = result.Result;
_barGraghData = data;
}
}
}
catch {}
}
/// <summary>
/// 把接收到的數據轉換額外柱狀圖表所需要的數據, 繪制圖表
/// </summary>
private void ToLineGragh()
{
ChartControl chartControl = new ChartControl();
if (_barGraghData != null)
{
DataTable table = new DataTable();
//橫坐標顯示值
table.Columns.Add("hName", typeof(string));
//縱坐標顯示值
table.Columns.Add("value", typeof(int));
for (int i = 0; i < _barGraghData.GWFLMC.Length; i++)
{
DataRow row = table.NewRow();
row["hName"] = _barGraghData.GWFLMC[i];
row["value"] = _barGraghData.GWSL[i];
table.Rows.Add(row);
}
//動態生成一個柱狀圖表,調用下面的靜態方法
chartControl = ToBarGraph.GetChartControl("", 0, table, "hName", "hName", "value");
}
//縱坐標標題
chartControl.Dock = DockStyle.Fill;
this.panel1.Controls.Add(chartControl);
//X軸刻度間隔設置
XYDiagram xydiagram = (XYDiagram)chartControl.Diagram;
xydiagram.AxisX.MinorCount = 1;
//小刻度是否顯示
xydiagram.AxisX.Tickmarks.Visible = false;
xydiagram.AxisX.Range.MinValueInternal = -0.5D;
}
}
/// <summary>
/// 熱門崗位信息監測菜單
/// </summary>
public class HotjobMenu : BtnMenuBase
{
public override UserControl GetEditControl()
{
return new HotJobInfo();
}
}
/// <summary>
/// 生成柱狀圖類
/// </summary>
public static class ToBarGraph
{
/// 獲取圖表
/// </summary>
/// <param name="titleName">圖表名稱</param>
/// <param name="viewType">圖表類型</param>
/// <param name="dataSourse">數據源</param>
/// <param name="textField1">顯示文字字段</param>
/// <param name="textField2">橫坐標顯示的文字字段</param>
/// <param name="valueField">顯示數值字段</param>
/// <returns></returns>
public static ChartControl GetChartControl(string titleName, ViewType viewType, DataTable dataSourse, string textField1, string textField2, string valueField)
{
ChartControl _ChartControl = new ChartControl();
if (dataSourse == null || textField1 == "" || textField2 == "" || valueField == "")
{
return _ChartControl;
}
List<string> listTitle = new List<string>();
foreach (DataRow item in dataSourse.Rows)
{
string title = item[textField1].ToString();
if (listTitle.Contains(title))
{
continue;
}
else
{
listTitle.Add(title);
DataView dv = dataSourse.AsDataView();
dv.RowFilter = string.Format(" {0}='{1}' ", textField1, title);
DataTable dt = dv.ToTable();
// 柱狀圖里的第一個柱
Series Series1 = new Series(title, viewType);
Series1.ArgumentScaleType = ScaleType.Qualitative;
Series1.PointOptions.PointView = PointView.ArgumentAndValues;//顯示表示的信息和數據
Series1.PointOptions.ValueNumericOptions.Precision = 0;
Series1.DataSource = dt;
//柱狀圖柱子的寬度設置
BarSeriesView bsv = (BarSeriesView)Series1.View;
bsv.BarWidth = 7;
// 以哪個字段進行顯示
Series1.ArgumentDataMember = textField2;
Series1.ValueScaleType = ScaleType.Numerical;
// 柱狀圖里的柱的取值字段
Series1.ValueDataMembers.AddRange(new string[] { valueField });
Series1.LegendText = title;
_ChartControl.Series.Add(Series1);
}
}
return _ChartControl;
}
}

