• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed ItemsSource w DataGrid

Object Storage Arubacloud
0 głosów
1,217 wizyt
pytanie zadane 26 listopada 2018 w C# przez marcinconn Obywatel (1,560 p.)
zamknięte 27 listopada 2018 przez marcinconn

Witam,

Mam sobie Obiekt DataGrid, który powinien wyświetlać(po kliknięciu menu) zbiór danych wybranych z danej tabeli(baza danych to plik MS Access). Jednak jedyne co się dzieje to błąd: Kolekcja elementów musi być pusta zanim zostanie użyte źródło ItemsSource

   w System.Windows.Controls.ItemCollection.SetItemsSource(IEnumerable value, Func`2 GetSourceItem)
   w System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   w System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   w System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   w System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   w System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   w System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   w System.Windows.Controls.ItemsControl.set_ItemsSource(IEnumerable value)
   w plan.MainWindow.ShowPlan(Object sender, MouseButtonEventArgs e) w wiersz 62

 

Część kody w pliku xaml

<DataGrid Name="plan" IsReadOnly="True"  AutoGenerateColumns="False" CellStyle="{StaticResource CellStyleWithPadding}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Lp"></DataGridTextColumn>
                        <DataGridTextColumn Header="Godziny"></DataGridTextColumn>
                        <DataGridTextColumn Header="Poniedziałek"></DataGridTextColumn>
                        <DataGridTextColumn Header="Wtorek"></DataGridTextColumn>
                        <DataGridTextColumn Header="Środa"></DataGridTextColumn>
                        <DataGridTextColumn Header="Czwartek"></DataGridTextColumn>
                        <DataGridTextColumn Header="Piątek"></DataGridTextColumn>
                    </DataGrid.Columns>
            </DataGrid>

 

Metoda służąca do wybrania danych z bazy:

public void ShowPlan(object sender, MouseButtonEventArgs e)
        {
            string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=...";
            try
            {

                OleDbConnection connection = new OleDbConnection(connectionString);
                connection.ConnectionString = ConfigurationManager.ConnectionStrings["Connection"].ToString();
                connection.Open();
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = "SELECT * FROM [template]";
                cmd.Connection = connection;
                OleDbDataReader dr = cmd.ExecuteReader();
                tree.ItemsSource = null;
                tree.ItemsSource = dr; <- to jest ta 62.linia
                connection.Close();
            }
            catch(Exception ex)
            {
                ...
            }
        }

 

miałby ktoś jakiś pomysł na pozbycie się tego?

komentarz zamknięcia: powód

1 odpowiedź

0 głosów
odpowiedź 26 listopada 2018 przez Siemił Mądrala (7,380 p.)

Cześć,

moim zdaniem problem jest w tym że wrzucasz obiekt typu OleDbDataReader  do DataGrid.ItemSource. 

Readera powinieneś najpierw wczytać do DataTable a później DefaultView wrzucić w ItemSource.

Na przykład:

OleDbDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
tree.ItemsSource = dt.DefaultView;
komentarz 26 listopada 2018 przez marcinconn Obywatel (1,560 p.)
   w System.Windows.Controls.ItemCollection.SetItemsSource(IEnumerable value, Func`2 GetSourceItem)
   w System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   w System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   w System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   w System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   w System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   w System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   w System.Windows.Controls.ItemsControl.set_ItemsSource(IEnumerable value)
   w plan.MainWindow.ShowPlan(Object sender, MouseButtonEventArgs e) w ... wiersz 63

a wiersz 63 to:

tree.ItemsSource = dt.DefaultView;

Podobne pytania

0 głosów
1 odpowiedź 716 wizyt
pytanie zadane 1 grudnia 2018 w C# przez marcinconn Obywatel (1,560 p.)
0 głosów
0 odpowiedzi 192 wizyt
0 głosów
1 odpowiedź 478 wizyt

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...