Rysowanie diagramów kołowych przy pomocy kontrolki Chart

0

Witam,
Mam projekt Windows Forms. Na jednej z formatek umieściłem kontrolkę chart (typ diagramu jest ustawiony na diagram kołowy). Napisałem sobie klasę diagramPart, która ma reprezentować jakąś część diagramu kołowego, tutaj macie jej część:

        string diagramPartName;
        int value;
        Color diagramPartColor;

        public string GetName()
        {
            return diagramPartName;
        }

        public int GetValue()
        {
            return value;
        }

        public Color GetColor()
        {
            return diagramPartColor;
        }

W klasie formatki mam kolekcję diagramPart. Teraz chcę stworzyć diagram kołowy na podstawie tej kolekcji. Tzn. jeśli mam w kolekcji obiekt:
diagramPart1 (nazwa - "dp1", wartość - 25, kolor - zielony),
to program ma stworzyć diagram, w którym jedna część będzie miała wartość 25%, kolor zielony i podpis w legendzie dp1.
Pomocy :D

[EDIT]: Po długim googlowaniu mam coś takiego:

chart.Series["Series1"].Points.AddXY("part", .1);

dodaje to część do diagramu z odpowiednim podpisem w legendzie. Nie rozumiem jednak co mam zrobić, żeby ta część miała określoną wielkość (czyli zajmowała np. 25% koła) - czegokolwiek bym nie podał jako drugi argument (oprócz zera), to program tworzy mi diagram z jedną częścią zajmującą całe koło. Kiedy wywołam linijkę jeszcze raz, program dodaje drugą część, wtedy obie zajmują po 50% koła (za następnym wywołaniem znowu dzieli diagram po równo, itd.).

1

A probowales dodac trzy linijki, kazda z innym drugim parametrem?

chart.Series["Series1"].Points.AddXY("part1", .1);
chart.Series["Series1"].Points.AddXY("part2", .2);
chart.Series["Series1"].Points.AddXY("part3", .7);
0

Problem po części rozwiązany, ale jeśli diagram nie został wypełniony do pełna (zajęte jest np. 90% koła), to pozostała jego część ma zostać zapełniona na biało. Moim zdaniem to powinno działać:

                    double restValue = 1 - sumOfValues;
                    chart.Series["Series1"].Points.AddXY("", restValue);
                    chart.Series["Series1"].Points[chart.Series["Series1"].Points.Count - 1].Color = Color.White;

Ale za każdym razem biała część diagramu jest bardzo mała... Wyliczanie ile powinna zająć biała część na pewno działa, dlatego nie wiem w czym problem :/

[EDIT]: Dodam, że próbowałem nawet dodawać wszystkie punkty diagramu od nowa (zapisywałem te punkty, które już były do obiektu Series, dodawałem biały, przypisywałem do chart.Series[...] ten obiekt), ale to też nic nie dało.

0

a podgladales debugerem co zawiera ta zmienna restValue? i jakiego typu jest SumOfValues i co zawiera?

0

Obie te zmienne zawierają poprawne wartości, sumOfValues jest typu double.

1 użytkowników online, w tym zalogowanych: 0, gości: 1