WPF toolkit tworzenie wykresu

0

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.

0

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.

0

Tak, chodzi dokładnie o ten toolkit. Będę bardzo wdzięczna za pomoc! i dziękuję za odp.

0

Czemu nie weźmiesz tych danych do charta z tego samego źródła skąd idą do datagrid?

0

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.

0

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.

0

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>

1

Ż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>
0

Dziękuję Ci za pomoc i poświęcony czas. Niestety nadal mam problem, wyskakuje wyjątek w momencie
wykresPoziomuGlukozy.DataContext = list;

4892987762.png

0

Pokaż jak to zrobiłaś.

0
        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();

        }

0
        <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>

0

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.

2

@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>

Źródło: http://stackoverflow.com/questions/992241/what-does-cannot-modify-the-logical-children-for-this-node-at-this-time-because

0

Działaaa :D Bardzo, bardzo Wam dziękuję!

ps. jeśli mieszkacie w Gliwicach to chętnie kawę albo piwo wam postawię :D

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