Usuwanie wiersza z Datagrida - ObservableCollection

0

Witam, piszę drobny program do obsługi wydruku dokumentów
Mam kontrolkę Datagrid i w niej, w jednej z kolumn button usuwający dany wiersz
Kod XAML

<DataGrid.Columns>
                <DataGridTextColumn Header="Asortyment" Binding="{Binding Asortyment}"/>
                <DataGridTextColumn Header="Numer Partii" Binding="{Binding NumerPartii}"/>
                <DataGridTextColumn Header="Data przydatności" Binding="{Binding DataPrzyd}"/>
                <DataGridTextColumn Header="Podpis" Binding="{Binding Podpis}"/>

                <DataGridTemplateColumn Width="45" Header="Usuń">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button x:Name="delete" Content="Usuń" Click="delete_Click"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

            </DataGrid.Columns>
          
        </DataGrid>

I kod do obsługi kliknięcia w C#

             DataTable dt = new DataTable();
            DataRowView row = (DataRowView)hdiDG.SelectedItem;
            dt.Rows.Remove(row.Row);

Kolumny Datagrida binduje w klasie

 public class DodajDoWidoku
        {
            public string Asortyment { get; set; }
            public string NumerPartii { get; set; }
            public string DataPrzyd { get; set; }
            public string Podpis { get; set; }
        }
        

Próbowałem na kilka sposobów z DataRowView i zawsze wyskakiwał błąd InvalidCastException : "Nie można rzutować obiektu typu 'DodajDoWidoku' na typ 'System.Data.DataRowView'."

1

Stwórz klasę reprezentującą element listy

class element{
     string Name {get; private set};
     string Surname {get; private set};
}

W ViewModelu stwórz kolekcję która będzie bindowana do ItemsSource DataGrida

IList<element> PersonList = new ObservableCollection<element>();

każdy "Row" będzie otrzymywał obiekt "element" jako DataContext. Wystarczy po naciśnięciu przycisku wyszukać który to obiekt listy i go usunąć:

private void ButtonClick(object sender, RoutedEventArgs e)
{
     element El= (sender as Button).DataContext as Element; 
     if(element != null)
          myViewModel.PersonList.Remove(element);
}
0

Dziękuję za podpowiedź, co prawda obecny projekt nie robię w MVVM, ale zrobiłem w/g Twojego wzoru i działa jak należy.
Pozdrawiam

0

Przez Button działa, ale jednak muszę zrobić jako MenuItem i po kliknięciu nie usuwa się

NazwaKlasy el = (sender as MenuItem).DataContext as NazwaKlasy;
            if (el != null)
            {
                HDI.Remove(el);
            }
0

A w DataContext na pewno masz element listy?

0

Nie może być inaczej, nie skompilowałby się

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