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

question-closed ItemsSource w DataGrid

VPS Starter Arubacloud
0 głosów
1,259 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ź 891 wizyt
pytanie zadane 1 grudnia 2018 w C# przez marcinconn Obywatel (1,560 p.)
0 głosów
0 odpowiedzi 208 wizyt
0 głosów
1 odpowiedź 507 wizyt

92,963 zapytań

141,928 odpowiedzi

321,161 komentarzy

62,297 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...