C1BarChart 是 Wijmo 使用频率最高的控件之一。典型的应用场景是通过数据源生成图表,分别制定 X轴和Y轴的字段。最近我们收到用户提出的需求,需要根据没有设置给图表数据的字段信息,设置在同一系列中数据条的颜色。
数据源中共有三个字段,分别为 Task, Time 和 Status, Task 和 Time 被设置给 X 和 Y 轴,条形图的颜色代表当前 Task 完成情况。最终实现效果图如下:
由于 C1BarChart 没有绑定 status 字段,那么我们如何获取当前任务的执行状态那? 答案是我们可以通过 C1GridView 来获取,我们通过绑定数据到 C1GridView 控件,由此我们便可以从前台获取任务状态信息了。因此,首先我们需要设置 C1GridView 的数据源。
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("Week", typeof(string));
dt.Columns.Add("Time", typeof(double));
dt.Columns.Add("Status", typeof(string));
dt.Rows.Add("Wk1", 6, "Running");
dt.Rows.Add("Wk1", 10, "Failed");
dt.Rows.Add("Wk1", 19, "Failed");
dt.Rows.Add("Wk1", 25, "Finished");
dt.Rows.Add("Wk1", 7, "Running");
C1BarChart1.DataSource = dt;
C1.Web.Wijmo.Controls.C1Chart.C1ChartBinding cb = new C1.Web.Wijmo.Controls.C1Chart.C1ChartBinding();
cb.XField = "Week";
cb.XFieldType = C1.Web.Wijmo.Controls.C1Chart.ChartDataXFieldType.String;
cb.YField = "Time";
cb.YFieldType = C1.Web.Wijmo.Controls.C1Chart.ChartDataYFieldType.Number;
C1BarChart1.DataBindings.Add(cb);
C1BarChart1.DataBind();
C1GridView1.DataSource = dt;
C1GridView1.DataBind();
}
接下来我们需要在前台获取任务状态,通过 C1GridView 来获取。代码如下:
var color = [];
$(document).ready(function () {
var data = $("#C1GridView1").c1gridview("data");
for (var i = 0; i < data.length; i++) {
var status = data<em class="bbcode-em"></em>[2];
if (status === "Running") {
color.push("Yellow");
}
else if (status === "Finished") {
color.push("Green");
}
else if (status === "Failed") {
color.push("Red");
}
}
$("#C1BarChart1").c1barchart({
painted: function (args) {
var count = $(this).data().fields.chartElements.bars.length;
for (var i = 0; i < count; i++) {
var bar = $(this).c1barchart("getBar", i);
bar.attr({
fill: color<em class="bbcode-em"></em>,
stroke: "black"
});
}
$(".wijmo-wijgrid").css("display", "none");
},
mouseOut: function (args) {
var count = $(this).data().fields.chartElements.bars.length;
for (var i = 0; i < count; i++) {
var bar = $(this).c1barchart("getBar", i);
bar.attr({
fill: color<em class="bbcode-em"></em>,
stroke: "black"
});
}
}
});
});
以上就是实现该功能的所有代码,可以下载 Demo 进行体验:
VS2012 + C# + Studio for ASP.NET Wijmo:
更多 Studio for ASP.NET Wijmo 特性请参考: