Pobieranie danych z datagrid

0

Mam datagrida z pytaniami uzupełnionego z bazy danych. I teraz chcę zrobić funkcje edytuj i w tym celu przesyłam kontrolkę datagrid do nowego okna

EditWindow editWindow = new EditWindow(dtgVoters); 
public EditWindow(DataGrid dtgvoters) 

i potrzebuje pobrać z datagrida pole QuestionID i chce przypisać do labela oraz żeby wiedzieć pod jakim ID edytuje pytanie oraz chciałbym zrobić jeszcze tak, żeby klikając edytuj w textboxie pojawił się tekst z kolumny title z datgrida.Wiem że te dane znajdują się w dtgvoters.CurrentItem ale za chiny nie wiem jak je pobrać. Co do tego ID to robiłem tak

label.Content = dtgvoters.SelectedIndex + 1;
 

to by mogło być ale tylko pod warunkiem że każde z pytań miałoby kolejne ID.

1

Robisz to trochę nieprawidłowo. Zainteresuj się bindowaniem danych w WPF. Kiedy zbindujesz sobie kolekcję jako własność ItemsSource to zwyczajnie będziesz mógł ją przekazać do tego okna, do którego chcesz, a ID będzie zwykłym polem klasy T gdzie kolekcja to ObservableCollection<T>. Bindowanie można zrobić z poziomu Code behind (jeżeli nie korzystasz z mvvm) jak i w samym xaml'u.

Przekazywanie do modalnego okna całego grida mija się trochę z celem.

http://www.wpf-tutorial.com/datagrid-control/custom-columns/
http://www.wpf-tutorial.com/datagrid-control/details-row/
http://www.wpftutorial.net/datagrid.html

0

No dobra zrobiłem ObservableCollection która pobiera dane z bazy oraz binduje do grida przez ItemSource. Tylko teraz mam wyświetlone w datagrid dane z kolekcji i jak mam zrobić żeby zaznaczając 1 wiersz w datagrid przesłać do nowego okna ID i Title tego wiersza oraz jeśli ten problem będzie już rozwiązany to jak zaktualizować bazę danych o z edytowane pola z ObservableCollection?

0

Nie przesyłasz pojedynczego Id tylko własność zbindowaną jako SelectedItem czyli trzymając się tego co napisałem w pierwszym poście: publiczną własność klasy T:

private T selectedItem;
public T SelectedItem
{
	get { return this.selectedItem; }
	set
	{
		this.selectedItem = value;
		this.OnPropertyChanged(nameof(this.SelectedItem));
	}
}

PS: co to jest this.OnPropertyChanged(nameof(this.SelectedItem)); oraz interfejs INotifyPropertyChanged dowiesz się przy okazji czytania o bindowaniu danych. Pełno tego w internetach.

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