Witam, mam kolejny problem z którym nie mogę sobie poradzić i rozkładam już ręce co tu robić. Na dole znajduje się podsumowany problem pod hasłem W SKRÓCIE jakby się komuś nie chciało tych wypocin czytać.
W klasie FuelConsumptionReport
dodaję profile raportów spalania do listy, a następnie je zapisuje do XML
List<FuelConsumptionProfiles> fuelCompution = new List<FuelConsumptionProfiles>();
fuelCompution.Add(new FuelConsumptionProfiles
{
Date = this.DataTextBox.Text,
FuelPrice = Convert.ToDouble(this.FuelPriceTextBox.Text),
Mileage = Convert.ToDouble(this.MileagetextBox.Text),
FuelCount = Convert.ToDouble(this.FuelCountTextBox.Text),
NameAttribute = Incoming
});
//zapis
SaveXML.SaveData(fuelCompution, "FuelProfiles.xml");
wartość właściwości Date
pojawia mi się w moim listBox
po jej wybraniu mam dostęp do reszty właściwości.
Musiałem dodać do programu opcję usuwania elementów z tej listy. I tutaj pojawił się problem.
Chodzi o to że mam też klasę podobną do tej CreateCarProfile
, gdzie tworzę profile pojazdów. i teraz jak wchodzę obojętnie w który z tych profili wyświetlają mi się w listBox w klasie FuelConsumptionReport
raporty związane tylko i wyłącznie z obecnie wybranym Samochodem. Robię to dzięki LINQ.
Czyli np. Dla pojazdu Honda:
list[0] = 1
list[1] = 2
Dla pojazdu Fiat:
list[0] = 3
list[1] = 4
Teraz wybieram Sobie pojazd Fiat i usuwam drugi element z listy(list[1]) = 4. i co się dzieje usuwa mi się wartość z list[1] pojazdu Honda czyli 2.
Jak wiadomo dzieje się tak dlatego że jak dodaje w poszczególnych profilach pojazdów wartości do listy List<FuelConsumptionProfiles> fuelCompution
to mamy:
list[0] = 1
list[1] = 2
list[2] = 3
list[3] = 4
dlatego usuwa mi się element [1] z listy zamiast [2]
Usuwam elementy z listy w ten sposób
int selectedIndex = FuelReportlistBox.SelectedIndex;
Teraz za pomocą LINQ wybieram żeby moja lista raportów spalania List<FuelConsumptionProfiles> fuelCompution
zawierała tylko wartości związane z obecnie wybranym pojazdem:
fuelCompution = fuelCompution.Where(x => x.NameAttribute == Incoming).ToList();
fuelCompution.RemoveAt(SelectedIndex);
SaveXML.SaveData(fuelCompution, "FuelProfiles.xml");
Znalazłem takie rozwiązanie na stackoverflow i działa tylko że nie do końca dlatego że mam ten nieszczęsny zapis po tym jak usunę wybrany element. Przez to (UWAGA TERAZ MERITUM ) w zapisanym pliku XML mam tylko raporty spalania, które należą tylko do tego samochodu. Dlatego że
fuelCompution = fuelCompution.Where(x => x.NameAttribute == Incoming).ToList();
//Co się tu dzieje to poprostu wybieram raporty spalania związane tylko z obecnie wybranym samochodem.
Jak to zrobić żeby przed zapisem
SaveXML.SaveData(fuelCompution, "FuelProfiles.xml");
nazwa listy fuelCompution
zawierała wszystkie elementy listy a nie tylko te które zostały w danym pojeździe po usunięciu wybranego.
Przepraszam że napisałem taką książkę ale chciałem to dobrze wytłumaczyć o co chodzi mam nadzieje że ktoś pomoże bo już siedzę nad tym tyle i nic nie wychodzi a w pon muszę program pokazać na zaliczenie.
Znalazłem coś takiego jeszcze http://stackoverflow.com/questions/4312437/remove-items-of-list-from-another-lists-with-criteria ale to dla mnie już hard level i nic mi nie wychodzi.
W SKRÓCIE!!
public class Klasa
{
List<FuelConsumptionProfiles> fuelCompution = new List<FuelConsumptionProfiles>();
public void metoda()
{
fuelCompution = fuelCompution.Where(x => x.NameAttribute == Incoming).ToList();
fuelCompution.RemoveAt(SelectedIndex);
SaveXML.SaveData(fuelCompution, "FuelProfiles.xml");
}
}
Przez ten fragment kodu zapisuje do listy elementy związane tylko z x.NameAttribute == Incoming
czyli automatycznie kasuje mi się pozostałe rzeczy które mam w pliku XML. Chcę żeby po usunięciu tego elementu z listy zapisując fuelCompution
znajdowały się w niej wszystkie elementy - ten co usunąłem a nie tylko te co odpowiadają x.NameAttribute == Incoming
.