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

question-closed ItemsSource w DataGrid

0 głosów
114 wizyt
pytanie zadane 26 listopada 2018 w C# i .NET przez marcinconn Obywatel (1,120 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ł Obywatel (1,040 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,120 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ź 69 wizyt
pytanie zadane 1 grudnia 2018 w C# i .NET przez marcinconn Obywatel (1,120 p.)
0 głosów
0 odpowiedzi 39 wizyt
0 głosów
1 odpowiedź 147 wizyt
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

62,255 zapytań

108,374 odpowiedzi

226,204 komentarzy

34,753 pasjonatów

Przeglądających: 278
Pasjonatów: 23 Gości: 255

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...