Witam,
chcę dodawać obiekty(auta) do datagrid. Chciałbym aby po zamknięciu programu, przy ponownym uruchomieniu, wcześniej zapisane auta były wyświetlane w datagrid, oraz dodatkowo te, które dodaję na bieżąco. Stworzyłem klasę auto:
[Serializable]
public class Auto
{
public string NrRejestracyjny { get; set; }
public string NumerNadwozia { get; set; }
public string Model { get; set; }
public string Producent { get; set; }
public string RokProdukcji { get; set; }
public string Przebieg { get; set; }
}
Auta dodane podczas działania programu elegancko wyświetlają się w datagtid(name="tabla"), ale przy ponownym uruchomieniu "nie widać ich". Problem rozwiązywałem w ten sposób, że każde nowo dodane auto miało być zapisywane do pliku .txt, który przy starcie programu miałby być otwierany, sczytane auta wrzucane do listy, a ta następnie wrzucane na datagrid.
public partial class MainWindow : Window
{
public ObservableCollection<Auto> Auta { get; set; }
static FileInfo o = new FileInfo(@"C:\Users\Kuba\Desktop\C#\auta.txt");
public MainWindow()
{
Auta = new ObservableCollection<Auto>();
InitializeComponent();
if (o.Exists)
{
BinaryFormatter bitFormat = new BinaryFormatter();
Stream stream3 = new FileStream(@"C:\Users\Kuba\Desktop\C#\auta.txt", FileMode.Open, FileAccess.Read, FileShare.None);
for (int i = 0; i < 10; i++)
{
var p = bitFormat.Deserialize(stream3) as Auto;
if (p == null) { }
else
{
Auta.Add(p);
}
}
stream3.Close();
}
else { }
tabela.ItemsSource = Auta;
}
Funkcja zapisu i dodawania do datagrid:
private void ok_Click(object sender, RoutedEventArgs e)
{
Auto auto = new Auto();
auto.Model = model.Text;
auto.NrRejestracyjny = numerr.Text;
auto.NumerNadwozia = numern.Text;
auto.Producent = producent.Text;
auto.Przebieg = przebieg.Text;
auto.RokProdukcji = rok.Text;
Auta.Add(auto);
BinaryFormatter bitFormat2 = new BinaryFormatter();
Stream stream2 = new FileStream(@"C:\Users\Kuba\Desktop\C#\auta.txt", FileMode.Append, FileAccess.Write, FileShare.None);
bitFormat2.Serialize(stream2, auto.NrRejestracyjny);
bitFormat2.Serialize(stream2, auto.NumerNadwozia);
bitFormat2.Serialize(stream2, auto.Model);
bitFormat2.Serialize(stream2, auto.Producent);
bitFormat2.Serialize(stream2, auto.RokProdukcji);
bitFormat2.Serialize(stream2, auto.Przebieg);
stream2.Close();
tabela.ItemsSource = Auta;
Niestety taki sposób nie działa- nie rozumiem i nie wiem dlaczego, ale przy deserializacji sczytane auta są nullem, gdy w pliku txt normalnie są zapisane.
Bardzo proszę o pomoc czemu tak się dzieje. Jeśli ktoś ma inny pomysł na załatwienie tej sprawy chętnie posłucham :)