Hej ;)
Potrzebuję pomocy. Czy wiecie jak zrobić wykres na podstawie danych zawartych w datagrid w wfp przy użyciu toolkitu? Nie mogę sobie z tym poradzić, a niestety jest mi to potrzebne.
Hej ;)
Potrzebuję pomocy. Czy wiecie jak zrobić wykres na podstawie danych zawartych w datagrid w wfp przy użyciu toolkitu? Nie mogę sobie z tym poradzić, a niestety jest mi to potrzebne.
Masz na myśli ten toolkit http://www.codeproject.com/Articles/196502/WPF-Toolkit-Charting-Controls-Line-Bar-Area-Pie-Co ?
Prawdopodobnie trzeba będzie konwertować przy bindowaniu, w ostateczności myślę że da się te dane wrzucić z code behind.
Jutro będę mógł się temu przyjrzeć, chyba że ktoś inny Ci pomoże.
Tak, chodzi dokładnie o ten toolkit. Będę bardzo wdzięczna za pomoc! i dziękuję za odp.
Czemu nie weźmiesz tych danych do charta z tego samego źródła skąd idą do datagrid?
Próbowałam, ale też mi się nie udało. Nie jestem w tym zaawansowana, więc pewnie temu... problem polega na tym, że dane do dataGridu pobieram z bazy danych na podstawie zapytania, które zawiera dane podane przez użytkownika. Konkretnie użytkownik wybiera sobie datę i w dataGridzie wyświetlają się tylko rekordy obejmujące wybraną datę. Nie wiem jak podłączyć wynik zapytania do wykresu, więc myślałam, że może z DataGridu będzie łatwiej.
Bindując bezpośrednio z gridview dostaje pustą kolekcję która nie chce się odświeżać, nie wiem czemu.
Stwórz kolekcje którą uzupełnisz danymi z bazy, później później tą kolekcją uzupełnisz gridview i chart.
Pokaż może jak to masz zrobione.
Wczytanie danych do DataGrid:
string connetionString = null;
SqlConnection conn;
connetionString = @"data source= localhost\sqlExpress; initial catalog= Cukrzyca;integrated security=TRUE";
conn = new SqlConnection(connetionString);
try
{
string nazwa = tbNazwa.Text;
string data = datePicker1.SelectedDate.Value.ToShortDateString();
conn.Open();
string select = "SELECT w.pora_dnia AS 'Pora', w.poziom_glukozy AS 'PoziomGlukozy' FROM Wpisy w WHERE nazwa_uzytkownika='" + nazwa + "' AND data_wpisu='" + data + "'";
SqlDataAdapter adapter = new SqlDataAdapter(select, conn);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
DataTable dt = new DataTable("Wpisy");
adapter.Fill(dt);
dgPoziomGlukozy.ItemsSource = dt.DefaultView;
conn.Close();
}
catch
{
}
Wczytanie danych do wykresu próbowałam zrobić w ten sposób, ale pojawia się wyjątek:
string connetionString = null;
connetionString = @"data source= localhost\sqlExpress; initial catalog= Cukrzyca;integrated security=TRUE";
using (SqlConnection conn = new SqlConnection(connetionString))
{
DataTable dt = new DataTable("Wpisy");
conn.Open();
string data = datePicker1.SelectedDate.Value.ToShortDateString();
string select = "SELECT w.pora_dnia AS 'Pora', w.poziom_glukozy AS 'PoziomGlukozy' FROM Wpisy w WHERE nazwa_uzytkownika='misia' AND data_wpisu='2014-10-20'";
SqlCommand cmd = new SqlCommand(select, conn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
wykresPoziomuGlukozy.DataContext = dt.DefaultView;
conn.Close();
}
<ChartTools:Chart x:Name="wykresPoziomuGlukozy" Title="Poziomy glukowy w wybranym dniu" Margin="273,253,85,13" >
<ChartTools:ColumnSeries
ItemsSource="{Binding}" IndependentValueBinding="{Binding Path = Pora}" DependentValueBinding="{Binding Path=Value}" Title="{Binding pora}"></ChartTools:ColumnSeries>
</ChartTools:Chart>
Żeby już za dużo nie komplikować to z obiektu DataTable w metodzie uzupełniającej datagrid pobierze się dane i wrzuci do charta.
Łap przykład:
DataTable table = new DataTable();
table.Columns.Add("Value", typeof(int));
table.Columns.Add("Key", typeof(string));
table.Rows.Add(25, "Dfdd");
table.Rows.Add(50, "Sdf");
table.Rows.Add(10, "sdfsd");
var list = new ObservableCollection<KeyValuePair<int, string>>();
foreach(DataRow row in table.Rows)
{
list.Add(new KeyValuePair<int, string>((int)row[0], row[1].ToString()));
}
chart.DataContext = list;
<chartingToolkit:Chart x:Name="chart" HorizontalAlignment="Left" Margin="10,10,0,0" Title="Chart Title" VerticalAlignment="Top"
Height="300" Width="338" > <chartingToolkit:ColumnSeries DependentValuePath="Key" IndependentValuePath="Value" ItemsSource="{Binding}" />
</chartingToolkit:Chart>
Dziękuję Ci za pomoc i poświęcony czas. Niestety nadal mam problem, wyskakuje wyjątek w momencie
wykresPoziomuGlukozy.DataContext = list;
Pokaż jak to zrobiłaś.
private void btnOK1_Click(object sender, RoutedEventArgs e)
{
nazwa = "Misia";
string data = datePicker1.SelectedDate.Value.ToShortDateString();
string connetionString = @"data source= localhost\sqlExpress; initial catalog= Cukrzyca;integrated security=TRUE";
SqlConnection conn = new SqlConnection(connetionString);
conn.Open();
string select = "SELECT w.poziom_glukozy AS 'PoziomGlukozy', w.pora_dnia AS 'Pora'FROM Wpisy w WHERE nazwa_uzytkownika='" + nazwa + "' AND data_wpisu='" + data + "'";
SqlDataAdapter adapter = new SqlDataAdapter(select, conn);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
DataTable table = new DataTable("Wpisy");
adapter.Fill(table);
//dgPoziomGlukozy.ItemsSource = table.DefaultView;
table.Columns.Add("Value", typeof(decimal));
table.Columns.Add("Key", typeof(string));
var list = new ObservableCollection<KeyValuePair< decimal, string>>();
foreach (DataRow row in table.Rows)
{
list.Add(new KeyValuePair<decimal, string>((decimal)row[0], row[1].ToString()));
}
wykres.DataContext = list;
conn.Close();
}
<ChartTools:Chart x:Name="wykres" Title="Poziomy glukowy w wybranym dniu" Margin="327,288,31,2" Grid.RowSpan="2">
<ChartTools:ColumnSeries
DependentValuePath="Key" IndependentValuePath="Value" ItemsSource="{Binding}" ></ChartTools:ColumnSeries>
</ChartTools:Chart>
Nie wiem, masz tak jak ja, a u mnie działa.
Coś jeszcze musi się u Ciebie dziać. Jeśli możesz to wrzuć cały projekt zajrzę tam. Albo zmień język komunikatów w VS żeby można było wygooglować treść błędu.
@dam1an http://finderr.net/clr/pl/Teraz-nie-mo%C5%BCna-zmienia%C4%87-logicznych-element%C3%B3w-podrz%C4%99dnych-dla-tego-w%C4%99z%C5%82a-poni-/1640357006 :D
@Misiaaaa Zamień XAMLa na:
<ChartTools:Chart x:Name="wykres" Title="Poziomy glukowy w wybranym dniu" Margin="327,288,31,2" Grid.RowSpan="2">
<ChartTools:ColumnSeries
DependentValuePath="Key" IndependentValuePath="Value" ItemsSource="{Binding}" DataContext="{Binding}"></ChartTools:ColumnSeries>
</ChartTools:Chart>
Działaaa :D Bardzo, bardzo Wam dziękuję!
ps. jeśli mieszkacie w Gliwicach to chętnie kawę albo piwo wam postawię :D