C# 在y轴上具有多个系列和多个值的Asp.Net图表

C# 在y轴上具有多个系列和多个值的Asp.Net图表,c#,asp.net,charts,C#,Asp.net,Charts,我有一个如下所示的数据表: 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 se

我有一个如下所示的数据表:

 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
在图表上,我需要它看起来像这样:

 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);
    }
这可以编译,但结果完全是一团糟:图例sais 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;
    }
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
DataTable dt=GetTestData();
负荷图电流总计(dt);
}
}
专用void LoadChartCurrencyTotal(DataTable initialDataSource)
{
对于(int i=1;i

我想我已经按照您喜欢的方式使用了以下代码。希望这有助于:

    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;
    }
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
DataTable dt=GetTestData();
负荷图电流总计(dt);
}
}
专用void LoadChartCurrencyTotal(DataTable initialDataSource)
{
对于(int i=1;i

成功了,谢谢。虽然图例元素都是名称系列:系列1、系列2……与图表底部的名称无关,这只是我在这里给它们起的一个名称,它们在我的应用程序中有不同的名称。你知道我怎么告诉它,图例应该有列的名称吗?我已经解决了它:“Series Series=new Series(initialDataSource.columns[I].ColumnName);”成功了,谢谢。虽然图例元素都是名称系列:系列1、系列2……与图表底部的名称无关,这只是我在这里给它们起的一个名称,它们在我的应用程序中有不同的名称。你知道我怎么告诉它,图例应该有列的名称吗?我已经解决了它:“Series Series=new Series(initialDataSource.columns[I].ColumnName);”