Błąd po szybkim podwójnym kliknięciu na element w DataGrid

0

Hej, mam problem z DataGrid-em, dane wyświetlają się tak jak powinny ale ilekroć szybko dwa razy kliknę na jakiś element to wyskakuje błąd z takim komunikatem: Element „EditItem” jest niedozwolony dla tego widoku.

 
 public MainWindow()
        {
            InitializeComponent();
            generate_columns();
        }
 
        public class Item
        {
            public int Num { get; set; }
            public string Start { get; set; }
            public string Finich { get; set; }
        }
 
        private void generate_columns()
        {
            DataGridTextColumn c1 = new DataGridTextColumn();
            c1.Header = "Num";
            c1.Binding = new Binding("Num");
            c1.Width = 110;
 
            dg1.Columns.Add(c1);
            DataGridTextColumn c2 = new DataGridTextColumn();
            c2.Header = "Start";
            c2.Width = 110;
            c2.Binding = new Binding("Start");
            dg1.Columns.Add(c2);
            DataGridTextColumn c3 = new DataGridTextColumn();
            c3.Header = "Finich";
            c3.Width = 110;
            c3.Binding = new Binding("Finich");
            dg1.Columns.Add(c3);
 
            dg1.Items.Add(new Item() { Num = 1, Start = "2012, 8, 15", Finich = "2012, 9, 15" });
            dg1.Items.Add(new Item() { Num = 2, Start = "2012, 12, 15", Finich = "2013, 2, 1" });
            dg1.Items.Add(new Item() { Num = 3, Start = "2012, 8, 1", Finich = "2012, 11, 15" }); 
        }

Nie zależy mi na edycji tych pól ale nie chcę by program wieszał się przez takie coś.

Mam nadzieję że temat odzwierciedla istotę problemu. Pozdrawiam ;-)

0

Nikt mi nie pomoże? Ten przykład tutaj to wersja uproszczona którą znalazłem na jakimś forum, w moim przykładzie mam więcej danych, pobieram je z bazy danych i chcę jakoś wyświetlić, chociaż w obu przypadkach błąd jest ten sam. Można jakoś "zbindować" kontener z danymi z DataGridem ale ja uznałem że lepiej (szybciej, efektywniej) było by wczytywać dane do DataGridu bezpośrednio podczas odczytywania ich z bazy, dlatego nie robię żadnego "pośredniego" kontenera i dodaję je manualnie. Może źle się za to zabieram, może powinienem użyć innej kontrolki a nie konkretnie DataGridu? Proszę o pomoc, jakąś podpowiedź. Pozdrawiam

0
MasterYi napisał(a):

Można jakoś "zbindować" kontener z danymi z DataGridem ale ja uznałem że lepiej (szybciej, efektywniej) było by wczytywać dane do DataGridu bezpośrednio podczas odczytywania ich z bazy, dlatego nie robię żadnego "pośredniego" kontenera i dodaję je manualnie.

Czy faktycznie jest "szybciej" i "efektowniej", skoro rodzi to takie problemy?

</quote>Może źle się za to zabieram, może powinienem użyć innej kontrolki a nie konkretnie DataGridu?</quote>
To nie jest kwestia kontrolki, tylko podejścia. Architekturą dla WPF jest MVVM, chcąc efektywnie tworzyć aplikacje w tej technologii, trzeba używać tego wzorca. Założenie jest takie, żeby w plikach code behind nie pisać kodu, a dane do kontrolek się binduje, a nie modyfikuje ręcznie kolekcję Items.

Najprostsze obejście - ustaw DataGrid.IsReadOnly na true.

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