Как определить макет источника данных? - PullRequest
1 голос
/ 12 марта 2012

У меня есть программа на C #, которая должна отображать диаграмму с двумя объектами серии. В настоящее время у меня просто есть набор данных с 2 таблицами данных. Две таблицы имеют одинаковое расположение. Я связываю набор данных со свойством источника данных диаграммы и выполняю метод databind (). Отображается только одна серия.

Я думаю, что решение заключается в определении пользовательского связующего контекста, но я не могу понять это. Может кто-нибудь, пожалуйста, помогите мне? Спасибо.

Ниже приведен мой код:

        DataSet dataSet = new DataSet();

        DataTable dataTable = database.Query("select sum(amount) as monthamount, month(transdate) as month from transaction where year(transdate)=" + balanceDateTimePicker.Value.Year + " group by month");
        dataSet.Tables.Add(dataTable);

        dataTable = database.Query("select sum(amount) as monthamount, month(transdate) as month from transaction where year(transdate)=" + balanceDateTimePicker.Value.AddYears(-1).Year + " group by month");
        dataSet.Tables.Add(dataTable);

        reoccuranceChart.DataSource = dataSet;
        System.Windows.Forms.DataVisualization.Charting.Series series = reoccuranceChart.Series["Series1"];
        series.XValueMember = "month";
        series.YValueMembers = "monthamount";
        series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
        series.IsVisibleInLegend = false;

        series = reoccuranceChart.Series["Series2"];
        series.XValueMember = "month";
        series.YValueMembers = "monthamount";
        series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
        series.IsVisibleInLegend = false;

        reoccuranceChart.DataBind();

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Я нашел это. Это было на самом деле довольно просто. Все, что мне нужно было сделать, это привязать series.points индивидуально:

        DataSet dataSet = new DataSet();

        DataTable dataTable = database.Query("select sum(amount) as monthamount, month(transdate) as month from transaction where year(transdate)=" + balanceDateTimePicker.Value.Year + " group by month");
        dataSet.Tables.Add(dataTable);

        dataTable = database.Query("select sum(amount) as monthamount, month(transdate) as month from transaction where year(transdate)=" + balanceDateTimePicker.Value.AddYears(-1).Year + " group by month");
        dataSet.Tables.Add(dataTable);

        System.Windows.Forms.DataVisualization.Charting.Series series = reoccuranceChart.Series["Now"];
        series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
        //series.IsVisibleInLegend = false;
        series.Points.DataBind(dataSet.Tables[0].DefaultView, "month", "monthamount", "");

        series = reoccuranceChart.Series["Last year"];
        series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
        //series.IsVisibleInLegend = false;
        series.Points.DataBind(dataSet.Tables[1].DefaultView, "month", "monthamount", "");
0 голосов
/ 12 марта 2012

Я думаю, что ваша проблема в повторном использовании вашей переменной dataTable. Вам нужно создать второй DataTable для второго запроса, чтобы предотвратить переназначение первого, так как функция Add не копирует данные в таблицу, она просто содержит ссылку на нее. Попробуйте изменить:

dataTable = database.Query ...

до

 DataTable dataTable2 = database.Query...

затем добавьте это как вторую таблицу и посмотрите, исправит ли это.

...