簡體   English   中英

y軸上具有多個系列和多個值的Asp.Net圖表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM