IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Oto Kosta
Člen
Avatar
Oto Kosta:27.3.2018 20:02

Ahoj, potřeboval bych poradit, případně sdělit zda to co chci jde.
(Visual Studio 2015, ASP.NET, psáno v C#)
-
Pomocí sloupcového grafu (chart komponenta) vykresluji časovou osu, založenou na datech z databáze.
Osa Y je stále jen "1" - všechny sloupce jsou stejně vysoké.
Osa X zobrazuje letopočet.
Problém je, že vždy dosáhnu jen jednoho ze dvou výsledků:

  1. - buď se mi u každého sloupce dole u základny zobrazí příslušný letopočet, ... ale potom jsou sloupce od sebe vzdáleny všechny stejně, bez ohledu na to, jak velký časový interval mezi nimi.
  2. - nebo se mi sloupce vykreslí pěkně proporcionálně, takže sloupce mezi kterými je 200 let jsou od sebe vzdáleny 2x víc než sloupce mezi kterými je 100 let. Ale potom se mi na ose X nezobrazí ty letopočty které mě zajímají. maximálně, pokud nastavím třeba interval 100, tak se mi na osu X vykreslí letopočty po sto letech.

Já mám ale třeba událost která se stala v roce 300, potom 350, potom 560, potom 1120, a chtěl bych sloupce proporcionálně vzdáleny od sebe a u paty každého ze sloupců, aby byl label: "300", "350", "560", "1120".

Mám pocit že jsem vyzkoušel všechny možné kombinace. Zkusil jsem chart naplnit pomocí metody Bind, zkusil jsem v cyklu přidávat jednotlivé datapointy.

Můžete poradit co dělám blbě?


while (rdr.Read())
{
vyskaSloupu = Convert.ToInt32(rdr­.GetValue(1).ToS­tring());
sLetopocet = rdr.GetValue(2)­.ToString();
dLetopocet = Convert.ToDate­Time(sLetopocet);
iLetopocet = dLetopocet.Year;
udalost = rdr.GetValue(3)­.ToString();

DataPoint dp = new DataPoint();
dp.SetValueY(vys­kaSloupu);
dp.XValue = dLetopocet.Year;
dp.Label = udalost;
dp.AxisLabel = dLetopocet.Ye­ar.ToString();
dp.ToolTip = dLetopocet.Ye­ar.ToString();
ser.Points.Add(dp);

//CustomLabel xlabel = new CustomLabel(dLe­topocet.ToOADa­te() - 0.5, dLetopocet.To­OADate() + 0.5, dLetopocet.Ye­ar.ToString(), 1, LabelMarkStyle­.None);
//Chart1.Char­tAreas["ChartA­rea1"].AxisX.Cus­tomLabels.Add(xla­bel);
}
rdr.Close();

Chart1.Series[0]­.IsValueShownAs­Label = true;
Chart1.Series[0]­.XValueType = ChartValueType­.DateTime;
Chart1.ChartA­reas[0].AxisX­.Interval = 1;

 
Odpovědět
27.3.2018 20:02
Avatar
Oto Kosta
Člen
Avatar
Oto Kosta:27.3.2018 20:14

Update: Nějak se zadařilo že se letopočet zobrazuje na ose X tak jak chci, ale jen pokud je rozsah mezi datumy malý. Pokud je rozsah velký a AxisX.Interval = 1, tak se to tam všechno samozřejmě nevejde a vše se steče do jedné tlusté čáry.

Potíž je v tom, že jsem se dočetl, že Interval musí být nastaven na 1, pokud chci aby se zobrazilo každé datum které odpovídá nějakému sloupci. Nevím ale proč se to snaží vykreslovat i všechny roky mezi tím..

Přiložím obrázky:

 
Nahoru Odpovědět
27.3.2018 20:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.