如何在不更改查询的情况下对条形图进行排序?

问题描述

搜索并尝试了很多不同的方法,但找不到对柱形图进行排序的方法。 我们希望在顶部而不是底部拥有最大的数量

我无法更改查询,但我需要对图表进行排序。

enter image description here

我尝试了以下方法

ColumnChartMachine.Series(0).sort(PointSortOrder.Descending,"Y")

 ColumnChartMachine.DataManipulator.sort(PointSortOrder.Descending,"Y","SeriesMachines")

我将 Y 更改为不同的值,以及升序/降序,只是想看看它是否会做某事,但没有运气。

有什么想法吗?

解决方法

我无法更改查询,但我需要对图表进行排序。

您不需要更改查询,您应该可以使用以下任一选项:

  1. 对数据源上的数据进行排序(无论是 DataTable 还是 List<T>,无需更改查询,即可在客户端对结果进行排序)。
  2. 调用 DataBind 后对图表点进行排序

示例

假设您在 DataTableList<T> 中有数据,如下所示:

var table = new DataTable();
table.Columns.Add("Name",typeof(string));
table.Columns.Add("Value",typeof(int));
table.Rows.Add("FIT programmatiestation",1);
table.Rows.Add("Atlas 1N36",1);
table.Rows.Add("anilox cleaner",1);
table.Rows.Add("Nietjespistool",1);
table.Rows.Add("MORLOCK",2);
table.Rows.Add("MA 2200 4k!",2);
table.Rows.Add("Catena klein 2E21",2);
table.Rows.Add("Automatische kokerslitter 76 mm",2);
table.Rows.Add("ROP",2);
table.Rows.Add("RDC 1",4);
myChart.Series[0].ChartType =
    System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bar;
myChart.ChartAreas[0].AxisX.Interval = 1;

选项 1 - 对数据源进行排序:

myChart.DataSource = new DataView(table,"","Value ASC",DataViewRowState.CurrentRows);
myChart.Series[0].XValueMember = "Name";
myChart.Series[0].YValueMembers = "Value";
myChart.DataBind();

选项 2 - 调用 DataBind 后对图表进行排序:

myChart.DataSource = table;
myChart.Series[0].XValueMember = "Name";
myChart.Series[0].YValueMembers = "Value";
myChart.DataBind();
myChart.Series[0].Sort(
    System.Windows.Forms.DataVisualization.Charting.PointSortOrder.Ascending);

两者都产生预期结果:

enter image description here