Grid wird verkleinert
Patrick Wiemann
Hallo Zusammen,ich habe im Artikelstamm einen neuen Folder angelegt. Bis dahin funktioniert auch noch alles tadellos.
Jetzt habe ich auf diesen Folder ein Grid erzeugt. Immer wenn ich den Artikelstamm öffne und über Suchen bzw.
über die Navigationsschaltflächen einen Datensatz aufrufe wird das Grid verkleinert (siehe angehängten Screenshot).
Wenn ich dann das Fenster etwas in die breite ziehe wird das grid wieder in der Größe dargestellt, die ich auch eingestellt hatte. Dieses Verhalten tritt auch nur beim ersten Aufrufen eines Datensatzes nach dem Öffnen des Artikeldatensatzfensters auf. Blättere ich weiter durch die Datensätze verkleinert sich das Grid nicht mehr.
Zur Info: Es handelt sich hierbei um folgende Optimizer-Regel:
Typ: CSCode
Aktion: Validate
FormTyp: 150
EventType: FormDataLoad
FormModusAll: ALL
Aktualisieren: True
Bei der Business One Version handelt es sich um 2007 A SP 00 PL 42.
Der C-Sharp Code ist folgender:
try
{
// NEW REGISTER
SwissAddonFramework.UI.Components.Folder artikelf1 = SwissAddonFramework.UI.Components.Folder.CreateNew("ART_F1");
// PARAMETER DES NEUEN REGISTERS
artikelf1.Top=10;artikelf1.Width=100;artikelf1.Left=700;artikelf1.Height=14;artikelf1.Pane=76;artikelf1.AffectsFormMode=false;artikelf1.Value="GP-Katalognr.";artikelf1.Description = "Geschäftspartnerkatalognummer";
SwissAddonFramework.UI.Components.Grid grid = SwissAddonFramework.UI.Components.Grid.CreateNew("UNI_Grid");
grid.FromPane = 76;
grid.ToPane = 76;
//grid.SetSizeAndPosition(SwissAddonFramework.UI.Components.Matrix.GetFromUID(pVal.Form,"150"));
grid.Top = 200; grid.Width = 100; grid.Left = 60; grid.Height = 30;
// REGISTER AUF FORM LADEN UND GRUPPIEREN
pVal.Form.AddItem(artikelf1);
pVal.Form.AddItem(grid);
pVal.Form.Update();
artikelf1.GroupWith("4");
//pVal.Form.PaneLevel = 76;
// WENN MAN AUFS REGISTER KLICKT, DANN MUSS DAS PANELEVEL "VON HAND" GESETZT WERDEN
SwissAddonFramework.UI.EventHandling.ItemEvents.ClickEventHandler delFolder = null;
delFolder = delegate (SwissAddonFramework.UI.EventHandling.ItemEvents.Click ev)
{
pVal.Form.Freeze(true);
string query = @"SELECT T0.CardCode, T0.Substitute FROM OSCN T0 WHERE T0.ItemCode = '" + TextEdit.GetFromUID(pVal.Form,"5").Value + "' ORDER BY CardCode";
ev.Form.PaneLevel = 76;
grid.ExecuteQuery(query);
grid.AffectsFormMode = false;
pVal.Form.Freeze(false);
};
grid.Refresh();
((SwissAddonFramework.UI.Components.Folder)pVal.Form.Items["ART_F1"]).AddHandler_Click(SwissAddonFramework.UI.Components.ModeComponent.FormModes.ALL, delFolder);
return true;
}
catch(System.Exception e)
{
MessageBox.Show("Unexpected Error: " + e.Message, "OK");
}
return false;
Vielleicht ist dieses Problem ja schon bekannt?!
Ich bin für jede Hilfe dankbar!
Mit freundlichen Grüßen,
Patrick Wiemann
Attachment
[url=http://www.coresystems.ch/wp-content/../wp-content/forum-image-uploads/patrickwiemann/Grid_Grafikfehler.JPG]Grid_Grafikfehler.JPG[/url]
Michael Egloff
Hallo Patrick,danke für die ausführliche Beschreibung! Ich konnte dein Codebeispiel gleich testen, aber bei mir gibt es immer einen Fehler, wenn ich einen Datensatz reinladen möchte ('Item already exist'). Bist du sicher, dass der Event "FormDataLoad" ist und nicht "FormLoad"?
Wenn ich "FormLoad" nehme, dann funktioniert alles ohne Probleme (List bleibt gleich gross).
Gruss,
Michael
Sascha Balke
Hallo Patrick,ein ähnliches Problem hatten wir auch, nachdem wir von 2005 PL43 auf 2007 PL42 umgestiegen sind und zwar im GP-Stamm.
Vielleicht hilft dir das folgende weiter (ist aus unserem GP-Stamm):
grid.SetSizeAndPosition(SwissAddonFramework.UI.Components.Matrix.GetFromUID(pVal.Form,"136"));
grid.Top += 25;
grid.Height -= 25;
Wenn nicht, dann melde dich einfach noch mal, denn ich habe hier grad keine SBO zur Hand um das mal testen.
VG
Sascha
Patrick Wiemann
Hallo Zusammen,@Sascha: Das war's leider auch nicht. :roll: Trotzdem danke für den Tipp!
@Michael: Also einen Fehler gibt's bei mir nie, aber du hast recht mit FormLoad funktioniert es! Wobei ich momentan nicht wirklich verstehe warum. Ich dachte das FormLoad-Event tritt immer nur beim öffnen eines Fensters auf?
O.K. Da das Grid jetzt schon mal so ist wie es auch sein soll habe ich jetzt nur noch ein kleines Problem. Momentan aktualisieren sich die Daten im Grid nur wenn ich auf das hinzugefügte Folder klicke. Ich habe also das Folder schon ausgewählt und klicke mich nun mit den Navigationsschaltfläche durch die Datensätze. Nur die Daten im Grid aktualisieren sich nicht. Klar, weil ich in meinem Code auf ein Click-Event reagiere. Mein eigentliches Ziel war es jedoch, dass sich das Grid (wie schon beschrieben) auch dann aktualisiert wenn ich den Folder mit dem Grid schon ausgewählt habe und dann auf die Navigationsschaltfläche klicke.
Ich probiere da schon einige Zeit dran herum nur leider mit mäßigem Erfolg. Ich stehe da irgendwie auf 'em Schlauch. :bang:
Hat von euch jemand eine Idee?
Gruss,
Patrick
Patrick Wiemann
Hallo zusammen,mein Problem hat sich erledigt. Es läuft jetzt so wie ich das gerne hätte.
Habe dafür folgende Regeln im Optimizer erzeugt:
1) Typ: CSCODE
Aktion: Validate
Form Typ: 150
Even Typ: FormLoad
Bevor Event: false
FormModus: ALL
Code:
try
{
// NEW REGISTER
SwissAddonFramework.UI.Components.Folder artikelf1 = SwissAddonFramework.UI.Components.Folder.CreateNew("ART_F1");
// PARAMETER DES NEUEN REGISTERS
artikelf1.Top=10;artikelf1.Width=100;artikelf1.Left=700;artikelf1.Height=14;artikelf1.Pane=76;artikelf1.AffectsFormMode=false;artikelf1.Value="GP-Katalognr.";artikelf1.Description = "Geschäftspartnerkatalognummer";
//NEW GRID
grid.FromPane = 76;
grid.ToPane = 76;
//grid.SetSizeAndPosition(SwissAddonFramework.UI.Components.Matrix.GetFromUID(pVal.Form,"150"));
grid.Top = 200; grid.Width = 100; grid.Left = 60; grid.Height = 30;
// REGISTER AUF FORM LADEN UND GRUPPIEREN
pVal.Form.AddItem(artikelf1);
pVal.Form.AddItem(grid);
pVal.Form.Update();
artikelf1.GroupWith("9");
//pVal.Form.PaneLevel = 76;
// WENN MAN AUFS REGISTER KLICKT, DANN MUSS DAS PANELEVEL "VON HAND" GESETZT WERDEN
SwissAddonFramework.UI.EventHandling.ItemEvents.ClickEventHandler delFolder = null;
delFolder = delegate (SwissAddonFramework.UI.EventHandling.ItemEvents.Click ev)
{
pVal.Form.Freeze(true);
ev.Form.PaneLevel = 76;
pVal.Form.Freeze(false);
};
((SwissAddonFramework.UI.Components.Folder)pVal.Form.Items["ART_F1"]).AddHandler_Click(SwissAddonFramework.UI.Components.ModeComponent.FormModes.ALL, delFolder);
return true;
}
catch(System.Exception e)
{
MessageBox.Show("Unexpected Error: " + e.Message, "OK");
}
return false;
2) Typ: CSCODE
Aktion: Validate
Form Typ: 150
Even Typ: FormDataLoad
Bevor Event: false
FormModus: ALL
Code:
try
{
pVal.Form.Update();
// WENN MAN AUFS REGISTER KLICKT, DANN MUSS DAS PANELEVEL "VON HAND" GESETZT WERDEN
pVal.Form.Freeze(true);
string query = @"SELECT T0.CardCode, T0.Substitute FROM OSCN T0 WHERE T0.ItemCode = '" + TextEdit.GetFromUID(pVal.Form,"5").Value + "' ORDER BY CardCode";
grid.ExecuteQuery(query);
grid.AffectsFormMode = false;
pVal.Form.Freeze(false);
return true;
}
catch(System.Exception e)
{
MessageBox.Show("Unexpected Error: " + e.Message, "OK");
}
return false;
Nach ersten Tests läuft alles gut.
Gruß,
Patrick
Patrick Wiemann
Moin zusammen,berauscht vom Glücksgefühl des augenscheinlichen Erfolges habe ich mich leider zu früh gefreut. Aus mir bisher nicht verständlichen Gründen führt oben stehender C#-Code zu einem Fehler. Was ich oben noch vergessen habe in den extended Code gehört noch die Erzeugung des Grids:
SwissAddonFramework.UI.Components.Grid grid = SwissAddonFramework.UI.Components.Grid.CreateNew("UNI_Grid");
Speichert man die beiden Regel ab und klickt auf Aktualisieren im Optimizer läuft dieses Beispiel einmal sauber durch. Ich öffne also den Artikelstamm, dort finde ich den neuen Folder mit dem Grid. Ich wähle den Folder aus. Ich klicke mich mit den Navigationsschaltfläche durch die Datensätze und die Daten im Grid werden auch aktualisiert. Danach schließe ich den Artikelstamm wieder. Möchte ich den Artikelstamm nun wieder öffnen erscheint die sich im Anhang befindende Fehler- Meldung.
Hat jemand eine Ahnung warum?
Gruß,
Patrick
Attachment
[url=http://www.coresystems.ch/wp-content/../wp-content/forum-image-uploads/patrickwiemann/Fehlermeldung.JPG]Fehlermeldung.JPG[/url]
Patrick Wiemann
Grüezi,hat keiner eine Idee was da schief läuft?
Gruß,
Patrick
Michael Egloff
Hallo Patrick,was ist der Grund, dass du die Erstellung des Grids in den Extended Code genommen hast?
Kannst du bitte alle deine Regeln (betreffend diesem Problem) in eine cocu-Datei exportieren und hier reinstellen. Ich kann dir sonst nicht ganz folgen :-)
Gruss
Patrick Wiemann
Hallo Michael,anbei alle meine Regeln zu meinem Problem.
Die Erstellung des Grids habe ich in den Extended Code gepackt damit ich
die Erstellung des Folders (inkl. Platzierung des Grids) und die Befüllung
des Grids auf zwei Regeln verteilen kann um dann wieder auf zwei unterschiedliche Eventtypen reagieren zu können. Der Hintergrund ist folgender: Als ich das alles noch in einer Regel hatte, wurde der Folder erzeugt, das Grid erzeugt und die Daten wurden nur bei einem Klick auf das neu erzeugte Folder ins Grid geladen. Das heißt ich habe den Artikelstamm aufgerufen, den ersten Datensatz mit den Navigationsschaltflächen ausgewählt und habe dann die GP-Katalognummer des ersten Datensatzes gesehen. Habe ich dann den zweiten Datensatz gewählt standen auf dem Register immer noch die
Katalognummern vom ersten Datensatz. Damit die Anzeige aktualisiert wurde musste ich auf ein anderes Register und wieder zurück wechseln.
Für die Anwendung beim Kunden sicherlich sehr unpraktisch.
Deshalb zwei Regeln und der Extended Code. Beim ersten Ausführen funktioniert das auch super aber danach eben nicht mehr.
Irgendwie habe ich mich da selbst ausgetrickst! :-(
Vielen Dank für deine Hilfe!
Gruß,
Patrick
Attachment
[url=http://www.coresystems.ch/wp-content/../wp-content/forum-file-uploads/patrickwiemann/NewRegisterGrid.cocu]NewRegisterGrid.cocu[/url]
Michael Egloff
Hallo Patrick,angehängt der Code.
Ich habe das Grid aus dem Globalen Code rausgenommen, da das anscheinend Probleme verursacht.
Auch habe ich dein Query auskommentiert (da ich nie Resultate hatte), kannst es aber wieder einkommentieren, dann sollte es bei dir auch funktionieren.
Versuchs mal und melde dich sonst nochmals!
Gruss,
Michael
Attachment
[url=http://www.coresystems.ch/wp-content/../wp-content/forum-file-uploads/michael-egloff/neues grid und form.cocu]neues grid und form.cocu[/url]
Patrick Wiemann
Hallo Michael,läuft! Vielen Dank!
Gruss,
Patrick
0
Please sign in to leave a comment.
Comments
0 comments