Odczytywanie wierszy z datagrid - WPF

0

Witam, mam problem z odczytywaniem wiersz z datagrid. Odczytanie 1 wiersza działa ale potrzębuję odczytać każdy wiersz osobno.
jest to zwykły datagrid - WPF nie używam mvvm ponieważ nie ogarniam jeszcze.

0

Pętla for

0

Tak wiem co robi petla i jak się jej używa zależy mi czym dokładnie w tej petli wskazać wiersz który ma np. Index=0

0

Skorzystaj z pętli foreach

foreach (DataGridViewRow row in datagridviews.Rows)
{
    string valuecol1 = dr.Cells["Column1"].Value.ToString();
    string valuecol2 = dr.Cells["Column2"].Value.ToString(); 
}
 
0

korzystam z zwykłego datagrid z itemami a nie datagridview

0

A nie możesz użyć rzutowania ? Tak jak przypisujesz do datagrid.DataContext = "obiektKolekcji", to odczytać poprzez datagrid.DataContext as "Kolekcja"
gdzie kolekcja to np List<Osoby>, a obiektKolekcji to obiekt.

0
for (int i = 0; i < _number; i++) { var _user = GridUser.Items.GetItemAt(i); } ``` Poradziłem już sobie tym, i po prostu przy dodwaniu itemu do datagrid zwieksza mi się _numer o 1 :P
1

Czemu korzystając z WPF tak się pałujesz zamiast korzystać z normalnego data-binding'u? :)

Rób tak:

  • Utwórz sobie klasę, gdzie każda publiczna własność będzie reprezentować kolumnę datagrid'u;
  • Utwórz publiczną własność w DataContext'cie GUI: IList<T> Collection = new ObservableCollection<T>(), którą dla testów zasilasz w konstruktorze klasy;
  • Zbinduj w XAML na poziomie GUI własność ItemsSource="{Binding Collection}";
  • I wreszcie wyłuskuj dane normalnie iterując kolekcję:
for(int i = 0; i < this.Collection.Count; i++)
{
	var field = this.Collection[i].ClassField; // Gdzie `ClassField` to własności klasy `T` z kolekcji;
}
  • Jeszcze prościej jest z pobieraniem zaznaczonego elementu, bo po prostu tworzysz prywatne pole T selectedItem...
  • Następnie tworzysz publiczną własność:
 
public T SelectedItem
{
	get { return { this.selectedItem; } }
	set
	{
		this.selectedItem = value;
		this.OnPropertyChanged(nameof(this.SelectedItem));
	
}
  • I bindujesz ją do własności SelectedItem="{Binding SelectedItem,UpdateSourceTrigger=PropertyChanged}"; w GUI

Wiem, że to co napisałem może trochę dziwnie wyglądać, ale na dłuższą metę jest o wiele wygodniejsze niż grzebanie we własnościach kontrolki po to żeby wyłuskiwać dane. Po drugie tworzysz pewną separację warstwy logiki od warstwy widoku, którą w pełni tworzy się korzystając np. z wzorca mvvm zalecanego do tworzenia aplikacji w WPF.

Zalecam także poczytać o interfejsie INotifyPropertyChanged, którego implementacja w klasach pozwoli Ci powiadamiać widok o aktualizacji danych.

0

Ponieważ jest to mój pierwszy rozbudowany projekt w wpf i na obecna chwila mam w nim już tyle rzeczy że zbyt czasochłonne jest zmienianie wszystkiego pod mvvm zwłaszcza ze bardzo go nie ogarniam jeszcze. Zaraz spróbuje zmienić na to co napisałeś :)

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