Asp.net mvc 如何使用动态创建的谷歌图表发布流程?
我有一个图表,看起来像这样: 数据来自web服务,我希望所有数据在进入模型时保持完整。图表上的条形图表示时间跨度(只是显示timespan.TotalHours的数字列) 偶尔,如图所示,一个时间跨度将是负面的-这意味着它提前了计划。在这种情况下,我根本不想显示该段,事实上我想从绿色段中减去该时间。从我所看到的,可以帮助我实际减去负数的东西可以是后处理。但在完成之后,我如何才能修改图表创建 如果相关,图表的创建代码如下:Asp.net mvc 如何使用动态创建的谷歌图表发布流程?,asp.net-mvc,charts,asp.net-core,google-visualization,Asp.net Mvc,Charts,Asp.net Core,Google Visualization,我有一个图表,看起来像这样: 数据来自web服务,我希望所有数据在进入模型时保持完整。图表上的条形图表示时间跨度(只是显示timespan.TotalHours的数字列) 偶尔,如图所示,一个时间跨度将是负面的-这意味着它提前了计划。在这种情况下,我根本不想显示该段,事实上我想从绿色段中减去该时间。从我所看到的,可以帮助我实际减去负数的东西可以是后处理。但在完成之后,我如何才能修改图表创建 如果相关,图表的创建代码如下: <script type="text/javascript"&g
<script type="text/javascript">
google.charts.load('current', { 'packages': ['corechart'] });
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable();
// Since every row will alwyas have this as the first column, we do not need to iterate. The first column will always be this title.
data.addColumn("string", "Category");
// This iterates through each stage (timespan) and creates a column for it.
// And display only the relavent time spans on the chart.
@foreach (var stage in Model.selectedForm.rows[0].stages)
{
@Html.Raw("data.addColumn('number', '" + Regex.Replace(stage.label, "(\\B[A-Z])", " $1") + "');") // Adding a numeric column for each timespan (stage) in that row. Using Regex to make the labels more friendly to the user.
}
@foreach (var row in Model.selectedForm.rows)
{
@Html.Raw("data.addRow(['" + row.label + "'") //The first part of our row is the label - each subsequent stage will be filled in at each iteration below
foreach (var stage in row.stages) //For each stage in the row being created ...
{
if (stage.timespan.TotalHours <= 0)
{
@Html.Raw(", " + "null") // replace the column with a null value
}
else
{
@Html.Raw(", " + stage.timespan.TotalHours) //...Continue the HTML builder adding additional timespans to eventually...
}
}
@Html.Raw("]);\n\n") //...close it here
}
var options = {
titlePosition: 'none',
width: 1200,
height: 400,
legend: { position: 'top', maxLines: 3 },
bar: { groupWidth: '75%' },
isStacked: true
}
var chart = new google.visualization.BarChart(document.getElementById('SOPChart'));
chart.draw(data, options);
}
</script>
load('current',{'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
函数绘图图(){
var data=new google.visualization.DataTable();
//因为每一行都有这个作为第一列,所以我们不需要迭代,第一列总是这个标题。
data.addColumn(“字符串”、“类别”);
//这将遍历每个阶段(timespan)并为其创建一列。
//并仅在图表上显示相关的时间跨度。
@foreach(Model.selectedForm.rows[0].stages中的var阶段)
{
@Html.Raw(“data.addColumn('number'),“+Regex.Replace(stage.label,”(\\B[A-Z]),“$1”)+”;”//为该行中的每个时间跨度(stage)添加一个数字列。使用Regex使标签对用户更友好。
}
@foreach(Model.selectedForm.rows中的变量行)
{
@Html.Raw(“data.addRow(['“+row.label+””)//我们行的第一部分是标签-每个后续阶段将在下面的每次迭代中填写
foreach(varstage in row.stages)//对于正在创建的行中的每个阶段。。。
{
如果(stage.timespan.TotalHours如果您想在客户端上尝试javascript来纠正此问题
删除最后一次编辑并允许负值通过
然后使用下面的代码段进行更正,将其添加到-->var options={
for (var i = 0; i < data.getNumberOfColumns(); i++) {
if (data.getValue(i, data.getNumberOfColumns() - 1) < 0) {
// subtract from next to last column
data.setValue(i, data.getNumberOfColumns() - 2, data.getValue(i, data.getNumberOfColumns() - 2) + data.getValue(i, data.getNumberOfColumns() - 1));
// remove negative from last column
data.setValue(i, data.getNumberOfColumns() - 1, null);
}
}
for(var i=0;i
建议在foreach(row.stages中的var stage)中添加“if condition”
--输出替换值,而不是stage.timespan.TotalHours
我不确定您的意思。如果上次创建的列中的值为负值(这是唯一可以为负值的列),我根本不想画最后一列,而是从上一列中减去值。希望这能让它更清晰一些。更新的代码在哪里?嘿@WhiteHat我添加了更新的代码和更新的图像。我仍然无法找到如何减去从上一段中删除的条的值。我已经查看了这似乎有助于后处理,但到目前为止还没有成功。