Autor Beitrag
MarcRB1975
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131

XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
BeitragVerfasst: Sa 02.07.05 14:11 
Hallo,
ich hoffe mir kann jemand helfen ... und zwar:

ich habe ein StringGrid, indem ich diverse Daten eingetragen habe.

Über ein 2. StringGrid möchte ich aus dem 1.StringGrid den Zelleninhalt z.b. aus der Zeile5 und den Spalten 1-10 übernehmen, aber nur, wenn auch wirklich etwas in den Zellen steht. Ansonsten muss in den Spalten gesucht werden, bis etwas in den Spalten 1-10 steht.

Falls das 1.StringGrid in den Bereichen Daten enthält, möchte ich diese Daten im 2. StringGrid untereinander darstellen.

Ich probiere da schon wieder mal ewig rum, (for I:= usw) aber irgendwie will´s nicht, so wie ich es gerne hätte.

Bevor ich jetzt noch total abdrehe, dachte ich mir, ich stell mal dieses Problem, für manchen Delphi-Profi ist das bestimmt kein Problem.

Würde mich echt freuen, wenn mir jemand weiterhelften könnte, damit ich endlich weitermachen kann.

Danke im Voraus!!!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 02.07.05 15:27 
Hallo!

Irgendwie verstehen ich nicht ganz, was Du machen willst. Du hast also ein Stringrgid und da sind Daten drin. Nun willst Du aus Zeile 5 die Spalten 1 bis 10 in ein zweites Stringgrid übernehmen. Soweit klar. Aber was soll gemacht werden, wenn an dieser Stelle nichts steht? :gruebel:

Und wo im zweiten Stringgrid sollen die Daten aus dem ersten Stringgrid auftauchen? :lupe:

Zeige auch mal her, was Du bisher versucht hast.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MarcRB1975 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131

XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
BeitragVerfasst: Sa 02.07.05 16:06 
Also...
Da ich aus dem 1. StringGrid die Zeile 5 und deren Daten aus den Spalten 1-10 auslesen möchte, soll überprüft werden, ob in allen 10 Zellen (Cells[5, 1-10])auch was drin steht. Das mit der Zeile 5 war nur ein Beispiel.
Falls was drin steht, sollen diese Daten aus den Cells[5, 1-10] in das 2. StringGrid
Cells[1-10, 1] - also untereinander - geschrieben werden.

Warum das Ganze überhaupt, wirst Du Dich bestimmt fragen??!!

Nun, ich habe ein StringGrid, indem alle Daten eines jeden einzelnen Mandanten stehen
(Steuerkanzlei).
Das StringGrid habe ich in sog. verschiedene Bereiche gegliedert. So sind z.B. in den Reihen 1-20 die internen und allgemeinen externen Mandantendaten.

In den Reihen 50-300 sollen Daten eingegeben werden die zur Berechnung von der PKW-Nutzung dienen.
Durch meine Frage möchte ich folgendes erreichen:
Jeder PKW (Daten) soll die Reihe 50-300 belegen. Die Daten stehen ab der Reihe 50 untereinander, also Cells[1, 50-300].
Falls ich einen neuen PKW anlegen möchte, soll dieser die Daten nicht in die 1.Spalte, sondern in die 2.Spalte schreiben Cells[2, 50-300]. Der 3.PKW in die 3.Spalte Cells[3, 50-300] usw....

Nun... das ist nicht mein Problem, sondern, ich möchte durch einen Click erreichen, dass sich ein MDI mit einem StringGrid öffnet, das mir anzeigt, ob ich einen, zwei oder 3 PKW´s eingegeben habe.
Dazu muss er prüfen, ob im 1. StringGrid in den Cells[1-10 , 50] was drin steht.
Steht was drin, sollen diese Daten in das 2.StringGrid untereinander (Cells[1, 1-10]) angezeigt werden.
Durch einen späteren Klick darauf soll sich dann das dazugehörigen Formular des PKW´s öffnen. Gut, das ist letztendlich nicht aber das Problem.

Ich vorhin was mit repeat gelesen und ich könnte mir vorstellen, dass das klappt. Oder??
Zur Info:
Mein 1. StringGrid heißt: MandNeu.AktuelleMandantenDaten.Cells[i,j].
Das 2. StringGrid heißt: AllePKW.Cells[k,l];

Du fragst nach dem, was ich da schon soo versucht habe. Nun... da ich es immer gleich im Original-Programm geschrieben und es nicht klappte, habe ich´s gleich wieder gelöscht.
Ich steht halt jetzt völlig auf´m Schlauch. Ich kenn mich gar nicht mehr aus, wie ich das abklappern soll, dass wenn in dem einem StringGrid was drin steht, er diese Daten untereinander in das 2.StringGrid schreiben soll.

Ach ja noch was... Du hast gefragt, was er machen soll, wenn nichts drin steht....
nun, dann soll er nichts in das 2.StringGrid übernehmen.

Normalerweise soll es später so sein, dass alle Angaben schön hintereinander sind. Also Lücken entstehen keine. Wenn er also feststellt, dass ab der 5.Spalte nicht drin steht, wird es später so sein, dass auch nach der 5.Spalte keine Daten mehr kommen.

Ich hoffe, du kennst Dich da aus, was ich meine.

Moderiert von user profile iconUGrohne: Beiträge zusammengefasst.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 02.07.05 16:41 
Hm. Okay. Also die Zeile eines Stringgrids in die Spalte eines anderen zu kopieren ist ja erst einmal kein Problem:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const
  srcRow = 5;
  destCol = 0;
var
  i : Integer;
begin
  for i:=0 to StringGrid1.ColCount-1 do
    StringGrid2.Cells[destCol, i] := StringGrid1.Cells[i, srcRow]; //man sollte noch prüfen, ob das mit den Grenzen hinkommt
end;


So, nun zur Prüfung, ob irgendwo was drin steht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function isRowEmpty (aStringGrid : TStringGrid; row : Integer) : Boolean;
var
  i: Integer;
begin
  result := true;

  if row > aStringGrid.RowCount-1 then
    exit;

  for i:=0 to aStringGrid.ColCount-1 do
    if aStringGrid.Cells[i, row] <> '' then
    begin
      result := False;
      exit;
    end;
end;

Für eine Spalte dann halt analog.

Wenn Du nun die erste Zeile suchst, in der was drin steht, machst Du das so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
const
  startRow = 5; //ab wo soll gesucht werden?
var
  row : Integer;
  found : Boolean;
begin
  row := startRow;
  found := false;
  while row <= aStringGrid.RowCount-1 do
  begin
    found := not isEmptyRow(aStringgrid, row);
    if not found then
      inc(row);
  end;

  if found then //nicht-leere Zeile gefunden, Zeilennummer ist "row"
  begin
    ...


So, ich hoffe, das hat schonmal ein wenig geholfen.

Grüße
Christian

P.S.: Quelltexte hier im Editor geschrieben, können also noch Fehler aufweisen ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MarcRB1975 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131

XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
BeitragVerfasst: Sa 02.07.05 23:45 
Vielen Dank für Deine Antwort!!!!
Probiere es aus. Wenn´s klappt, melde ich mich wieder.
MarcRB1975 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131

XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
BeitragVerfasst: Mi 06.07.05 16:15 
Hallo, leider hat das nicht so geklappt.
Ich musste es es so umschreiben, dass es auf mein Programm passt.
Hat mich ganz schön Arbeit und vorallem Nerven gekostet.
Hatte das nämlich mit dem :
for I:
ect. nicht so verstanden.

Aber jetzt, nachdem ich es ja so ändern musste, damit mein Programm auch funktioniert, hab ich das mit der Schleife auch verstanden und es klappt alles so, wie ich es wollte!!

Danke aber trotzdem für Deine Hilfe!!!
- Manchmal braucht man einen Denkanstoß, damit man etwas vollenden kann!!! -

DANKE !!