[英]Asp.Net chart with multiple series and multiple values on the y axis
我有一個數據表,看起來像這樣:
Data Value 1 Value 2 Value 3
series1 32 -2 46
series2 -62 99
series3 19 23 98
在圖表上,我將需要使其看起來像這樣:
32 -2 46 -62 99 19 23 98
series1 series2 series3
和圖例:值1,值2,值3
我嘗試過的代碼:
private void LoadChartCurrencyTotal(DataTable initialDataSource)
{
DataTable pivotedDt = Pivot(initialDataSource);
chart1.DataSource = pivotedDt;
foreach (DataRow dr in pivotedDt.Rows)
{
Series series = new Series(dr["Data"].ToString());
List<string> colNames = (from DataColumn col in pivotedDt.Columns where col.ColumnName != "Data" select col.ColumnName).ToList();
series.XValueMember = "Data";
series.YValueMembers = string.Join(",", colNames);
chart1.Series.Add(series);
}
chart1.DataBind();
FormatChart(chart1);
}
這將返回Data points insertion error. Only 1 Y values can be set for this data series.
Data points insertion error. Only 1 Y values can be set for this data series.
由於連接的列名。
還嘗試了:
private void LoadChartCurrencyTotal(DataTable initialDataSource)
{
DataTable pivotedDt = Pivot(initialDataSource);
foreach (DataRow pivotDr in pivotedDt.Rows)
{
Series serie = new Series(pivotDr["Data"].ToString());
List<decimal?> colValues = new List<decimal?>();
foreach (DataColumn col in pivotedDt.Columns)
{
if (col.ColumnName != "Data")
{
//colValues.Add(pivotDr[col.ColumnName] != DBNull.Value
// ? decimal.Parse(pivotDr[col.ColumnName].ToString())
// : new decimal?());
decimal? colValue = pivotDr[col.ColumnName] != DBNull.Value
? decimal.Parse(pivotDr[col.ColumnName].ToString())
: new decimal?();
serie.Points.AddXY(pivotDr["Data"], colValue);
}
}
//serie.Points.AddXY(pivotDr["Data"], string.Join(",", colValues));
chart1.Series.Add(serie);
}
FormatChart(chart1);
}
這樣可以編譯,但結果完全是混亂的:圖例表示series1,series2,series3,結果是:
32 -62 19 -2 23 46 99 98
series1 series2 series3
我得到每列而不是每行的結果。
我嘗試的最后一個是:
DataView pivotedDv = pivotedDt.AsDataView();
chart1.DataBindTable(pivotedDv, pivotedDt.Columns[0].ColumnName);
但這只會返回:
0.00 0.00 0.00
series1 series2 series3
和圖例:0.00
希望有人知道應該如何完成。 但請不要拖放解決方案,而要編寫代碼。 謝謝
我想我已經使用以下代碼來完成此工作。 希望這可以幫助:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = GetTestData();
LoadChartCurrencyTotal(dt);
}
}
private void LoadChartCurrencyTotal(DataTable initialDataSource)
{
for (int i = 1; i < initialDataSource.Columns.Count; i++)
{
Series series = new Series();
foreach (DataRow dr in initialDataSource.Rows)
{
int y = (int)dr[i];
series.Points.AddXY(dr["Data"].ToString(), y);
}
Chart1.Series.Add(series);
}
}
private DataTable GetTestData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Data", Type.GetType("System.String"));
dt.Columns.Add("Value1", Type.GetType("System.Int32"));
dt.Columns.Add("Value2", Type.GetType("System.Int32"));
dt.Columns.Add("Value3", Type.GetType("System.Int32"));
DataRow dr1 = dt.NewRow();
dr1["Data"] = "series1";
dr1["Value1"] = 32;
dr1["Value2"] = -2;
dr1["Value3"] = 46;
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["Data"] = "series2";
dr2["Value1"] = -62;
dr2["Value2"] = 0;
dr2["Value3"] = 99;
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3["Data"] = "series3";
dr3["Value1"] = 19;
dr3["Value2"] = 23;
dr3["Value3"] = 98;
dt.Rows.Add(dr3);
return dt;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.