【发布时间】:2019-02-19 10:41:23
【问题描述】:
我在 ASP.NET 中有一个 gridview,其中有一个 asp:templatefield,每行都包含一个按钮。在按钮上,我有一个数据目标属性,它是一个模式。
在 gridview 行绑定上,我获取行的 ID 并调用 SerializedBoxChart() 方法,该方法放入行的 ID 并检索数据。但是,它看起来像循环遍历每一行,我最终得到了gridview每一行的最后一行数据。当我单击按钮时,它会打开带有最终行数据的模式。我正在尝试根据 measureID 为每一行分配数据,当您单击按钮时,它会打开该行数据。
当 highcharts javascript 运行脚本并将其放置在 div 中但不知道如何解决此问题时,我感觉这与容器上的冲突 ID 有关。
<asp:TemplateField HeaderText="AvgDaysTaken" SortExpression="AvgDaysTaken">
<ItemTemplate>
<asp:Button type="button" runat="server" id="AvgDaysTaken" class="btn btn-primary" data-toggle="modal" data-target="#myBoxPlot" Text='<%# Eval("AvgDaysTaken") %>' />
</ItemTemplate>
</asp:TemplateField>
模态代码,其中包含一个带有 ID 容器的 div,其中将放置图表
<div class="container">
<!-- Modal -->
<div class="modal fade" id="myBoxPlot" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<div id="container" >
</div>
</div>
<div class="modal-footer">
<button type="button" id="close" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
使用c#获取箱线图的数据
public void SerializedBoxChart(int measureid)
{
string connectionstring = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
SqlConnection cn = new SqlConnection(connectionstring);
SqlCommand cmd = new SqlCommand("[dbo].so", cn);
cmd.Parameters.AddWithValue("@SubTeamNo", SubTeam);
cmd.Parameters.AddWithValue("@Month", Month);
cmd.Parameters.AddWithValue("@Year", Year);
cmd.Parameters.AddWithValue("@ReportPeriod", ReportPeriod);
cmd.Parameters.AddWithValue("@controlID", ControlID);
cmd.Parameters.AddWithValue("@PracticeGroupID", PracticeGroup);
cmd.Parameters.AddWithValue("@Instructor", SearchInput.Text);
cmd.Parameters.AddWithValue("@MeasureID", measureid) ;
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.CommandType = CommandType.StoredProcedure;
cn.Open();
SqlDataReader reader = cmd.ExecuteReader();
var chartValues = new List<string>();
var chartValues2 = new List<string>();
if (reader.HasRows)
{
while (reader.Read())
{
string name = reader.GetString(0);
if (name != "Total")
{
string str = reader["ChartData"].ToString();
string a = reader["MeasureDesc"].ToString();
string[] strList = str.Split(',');
// convert it in json
dataStr = JsonConvert.SerializeObject(strList, Formatting.None);
hiddenvariable.Value = dataStr;
hiddenvariablemeasuredesc.Value = a;
chartValues.Clear();
}
}
}
else
{
}
reader.Close(); // close the reader
cn.Close();
}
用于创建箱线图的 javascript:
function CreateBoxPlot() {
var hv = $('#hiddenvariable').val();
console.log(hv);
var hvmeasure = $('#hiddenvariablemeasuredesc').val();
console.log(hvmeasure);
var chart;
var titleText = hvmeasure;
var subTitleText = 'Test Chart Subtitle';
var type = 'boxplot';
var data = [JSON.parse(hv).map(item => parseInt(item))]; //Doesnt work in IE
var $container = $('<div>').appendTo(document.body);
$(function () {
$('#container').highcharts({
chart: { type: type, inverted: true},
title: { text: hvmeasure },
subtitle: { text: subTitleText },
renderTo: $container[0],
legend: { enabled: false },
tooltip: {
shared: true,
crosshairs: true
},
plotOptions: {
series: {
pointWidth: 50
}
},
xAxis: {
visible: false
},
yAxis: {
visible: true,
title: {
text: 'Values'
},
plotLines: [{
value: 80,
color: 'red',
width: 2
}]
}
});
chart = $('#container').highcharts();
chart.addSeries({ data: data });
});
}
【问题讨论】:
-
嗨 RA19,您使用了
highcharts标签,但问题与您的后端代码更相关。我可以向您推荐 Highcharts.NET包装器:highcharts.com/blog/products/dotnet 或者我可以帮助您,但只能使用 JS 代码。 -
我可以尝试在 .Net 包装器上工作,但可以在 JS 中执行此操作吗?请帮忙看看如何?
-
嗨@RA19,很遗憾我不太了解你的概念,因为我不懂
C#语言。如果你提供给我硬编码的数据和描述你想在 JS 中实现什么,我将能够帮助你。
标签: javascript c# html highcharts