AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid speichern,/laden Problem

Ein Thema von Noobinator · begonnen am 12. Jul 2006 · letzter Beitrag vom 16. Jul 2006
Antwort Antwort
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#1

Stringgrid speichern,/laden Problem

  Alt 12. Jul 2006, 15:56
Delphi-Quellcode:
procedure speichern1.SpeichernClick(Sender: TObject);
VAR Dateiname:string;
begin
if SaveDialog1.Execute then
  begin
    Dateiname := SaveDialog1.FileName;
    SaveGrid(Stringgrid1,Dateiname);
  end;
end;

procedure SaveGrid(StringGrid1: TStringGrid; fileName: string);
var
  iRow: integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  for iRow := 0 to StringGrid1.RowCount - 1 do
    sl.Add(StringGrid1.Rows[iRow].CommaText);
  sl.SaveToFile(fileName);
  sl.Free;
end;
//-----------------------------------------------
procedure laden1.LadenClick(Sender: TObject);
VAR Dateiname : String;
begin
if OpenDialog1.Execute then
  begin
    Dateiname := OpenDialog1.FileName;
    LoadFromFile(Stringgrid1, Dateiname);
  end;
end;

procedure LoadFromFile(StringGrid1: TStringGrid; txt: TFileName);
var
  sRows, sCols: TStrings;
  i: Integer;
begin
  sRows := TStringList.Create;
  sRows.LoadFromFile(txt);
  sCols := TStringList.Create;
  sCols.CommaText := sRows[0];
  StringGrid1.ColCount := sCols.Count;
  sCols.Free;
  StringGrid1.RowCount := sRows.Count;
  for i := 0 to Pred(sRows.Count) do
    StringGrid1.Rows[i].CommaText := sRows[i];
  sRows.Free;
end;
mithilfe dieser Proceduren Speichere ich ein Stringgrid ab.
Soweit funktioniert es auch, nur wenn ich nun es dann wieder lade, um es weiter zu bearbeiten kommt bei jeder Eingabe in eine Zelle
" " ist kein gültiger Integerwert"
Woran kann das liegen?
Ich Habe mir ein Notenverwaltungsprogramm mithilfe eines Stringgrids gebaut.
Dabei wird jede Zelle des Stringgrids auf einen Inhalt geprüft, und wenn etwas drinne steht, wird dieser Wert mit eingerechnet.
Meine Frage, kann es sein, das die Laden Procedure, irgendetwas in die Leeren Zellen einfügt, was delphi dann nicht will?

PS: was müsste ich machen, um ein zweitesn Stringgrid mit in der Datei zu speichern? oder das ich dieses über die selben dialoge anspreche?
also das ich 2 Stringgrids durch einen klick speichere?
habe das momentan durch die selbe Procedure nochmal gelöst, aber dass kann es ja nicht sein.

Mfg
Noobinator
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Stringgrid speichern,/laden Problem

  Alt 12. Jul 2006, 16:27
TStringGrid.Rows ist doch ein TStings.
Und da gibt es schon die Methoden SaveToFile und LoadFromFile.

Wieso der Umweg über eine TStringList?

Oder wenn du Schon eine TStringList haben willst, dann nimm doch TStringList.AddStrings.
Schau mal in der Delphi-Hilfe nach.

zu dem " " ist kein gültiger Integerwert:
hast Du vielleicht im Stringgrid eine Spalte als Integer-Spalte definiert?
Das .CommaText erzeugt dir nämlich Strings und beim Einlesen kannst Du aus einem ' ' oder '' keinen Integer mehr machen.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Stringgrid speichern,/laden Problem

  Alt 12. Jul 2006, 17:35
Delphi-Quellcode:
procedure SaveStringGridToFile(StringGrid: TStringGrid; const FileName: String);
var
  F: TStringList;
  i: Integer;
begin
  F := TStringList.Create;
  try
    F.Add(IntToStr(StringGrid.RowCount));
    F.Add(IntToStr(StringGrid.ColCount));
    for i := 0 to (StringGrid.RowCount - 1) do
      F.Add(StringGrid.Rows[i].CommaText);
    F.SaveToFile(FileName);
  finally
    F.Free;
  end;
end;


procedure LoadStringGridFromFile(StringGrid: TStringGrid; const FileName: String);
var
  F: TStringList;
  i: Integer;
begin
  F := TStringList.Create;
  try
    F.LoadFromFile(FileName);
    StringGrid.RowCount := StrToInt(F[0]);
    StringGrid.ColCount := StrToInt(F[1]);
    for i := 0 to (StringGrid.RowCount - 1) do
      StringGrid.Rows[i].CommaText := F[i + 2];
  finally
    F.Free;
  end;
end;
Quelle: dsdt.info

Wenn ich mehr Ahnung hätte, könnte ich dir jetzt auch noch sagen, was bei dir falsch ist...
Aber zumindest hättest du durch obigen Code etwas funkionierendes.

Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#4

Re: Stringgrid speichern,/laden Problem

  Alt 12. Jul 2006, 18:37
Danke leute.
Werde mal testen ob das jetzt geht.
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#5

Re: Stringgrid speichern,/laden Problem

  Alt 12. Jul 2006, 20:13
also ich habe mal den Code von Kollege Pfoto genommen.
Aber immmernoch das selbe Problem.
Der Fehler tritt nicht beim reinschreiben der Werte in das Stringgrid auf, sondern bei einer Procedure, die mir den Integerwerten, die eigentlich im grid sein sollten weiterrechnet.
wo könnte der Fehler noch liegen?
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#6

Re: Stringgrid speichern,/laden Problem

  Alt 13. Jul 2006, 15:54
Zitat von RavenIV:
TStringGrid.Rows ist doch ein TStings.
Und da gibt es schon die Methoden SaveToFile und LoadFromFile.

Wieso der Umweg über eine TStringList?

Oder wenn du Schon eine TStringList haben willst, dann nimm doch TStringList.AddStrings.
Schau mal in der Delphi-Hilfe nach.

zu dem " " ist kein gültiger Integerwert:
hast Du vielleicht im Stringgrid eine Spalte als Integer-Spalte definiert?
Das .CommaText erzeugt dir nämlich Strings und beim Einlesen kannst Du aus einem ' ' oder '' keinen Integer mehr machen.
wo kann ich das nachschauen? Und wie kann ich das ändern?
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#7

Re: Stringgrid speichern,/laden Problem

  Alt 16. Jul 2006, 12:00
Also leute ich habe mal mit meinem Lehrer über das Problem geredet, und er meint, das liegt daran,das das eben ein STRINGGRID ist, und kein INTEGERGRID.
Gibt es irgendeine andere Komponente, mit der man sowas realisierten kann? also eine Tabelle?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Stringgrid speichern,/laden Problem

  Alt 16. Jul 2006, 12:33
Hallo Noobinator,

irgendwann wirst du feststellen müssen, dass dein Problem nichts mit den Speicherroutinen zu tun hat. Es ist einfach ungeschickt anzunehmen, dass bei jedem Fach eine Note steht. Der folgende Code geht von FixedCols = 1 aus und verwendet die erste Spalte zur Anzeige des Durchschnittswertes einer Zeile, in der Integer-Werte eingetragen werden:

Delphi-Quellcode:
function Average(s: TStrings; iStart: Integer): String;
var
  i, iSum, iCount, iValue: Integer;
begin
  iSum := 0;
  iCount := 0;
  for i := iStart to Pred(s.Count) do
    if TryStrToInt(s[i], iValue) then
    begin
      Inc(iCount);
      Inc(iSum, iValue);
    end;
  if iCount = 0
    then Result := ''
    else Result := Format('%.1f', [iSum / iCount]);
end;

procedure TDemoForm.StringGridSetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
begin
  with StringGrid do
    Cells[0, ARow] := Average(Rows[ARow], FixedCols);
end;
Die notwedigen Änderungen für einen gewichteten Durchschnitt (Hauptfächer=3, WPU=2, Nebenfächer=1) wirst du selbst machen müssen. Und was die Speicher-Routinen angeht, so solltest du diese zuerst analysieren, bevor du sie kopierst oder gar veränderst. Deine Änderungen an dem Code aus Beitrag #1 legen den Verdacht nahe, dass du die Routinen nicht verstanden hast - ich weiß wie der Code vor deinen Änderungen aussah.

Grüße vom marabu
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#9

Re: Stringgrid speichern,/laden Problem

  Alt 16. Jul 2006, 12:41
ok ich danke dir marabu
werde mich nochmal durch den quellcode arbeiten müssen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz