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.
Pętla for
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
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();
}
korzystam z zwykłego datagrid z itemami a nie datagridview
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.
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
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.
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ś :)