Page 1 of 1

Problem mit automatischer Spaltenbreite

Posted: 22.08.2009, 12:08
by rd453
Hallo Torsten,

nach wie vor habe ich das Problem, das mit AutoWidth versehene Spalten zu schmal sind. Beispiel:

Image

Ich könnte mir vorstellen, dass die Ursache in der 3D-Darstellung liegt, d.h.dass die Pixel für den Rahmen nicht mitberechnet werden.

Würde mir vieles leichter machen, wenn AutoWidth korrekt funktionieren würde. Könntest du mal schauen?

Danke im Voraus und viele Grüße
Rudi

P.S.: Vielleicht wäre es ein Workaround, einen Wert angeben zu können (z.B. 4), der bei der Berechnung automatisch hinzuaddiert wird.

Re: Problem mit automatischer Spaltenbreite

Posted: 27.08.2009, 15:53
by torsten
Hallo Rudi
Sonntag ist wieder ppsGrid-Tag :-)
Ich werde mir die Sache dann vornehmen :-)
Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 30.08.2009, 18:17
by torsten
Hallo Rudi
Ich kann das Problem nicht nachvollziehen.
Sind die berechneten Breiten nur bei Fixed-Cells fehlerhaft?
Was steht in der Zelle als "Value"?
Wie sind die Einstellungen "CellPadding"?
Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 05.09.2009, 10:21
by rd453
Hallo Torsten,

bin leider noch nicht viel dazu gekommen, hab wie immer ein Zeitproblem.

Ja, das Problem tritt auch bei nicht-fixed-Zellen auf, habe aber keinen Screenshot dafür auf die Schnelle.

Hier wenigstens etwas rausgefilterte Info (iRow ist mein Index für die Datenzeile, also erst 0, dann 1 im Screenshot, sText ist ein String mit dem auszugebenden Text):

Cols[0].Width = 20;
Cols[0].AutoWidth = eWidthType.AutoWidth;
...
(Schleife über alle Datenzeilen)
Rows[FixedRowCount+iRow].StringAlignVert = ppsGrid.eContentAlign.Center;
oCell = Cells[0, FixedRowCount+iRow];
oCell.Tag = oCell.Value = sText;

Hoffe, dies hilft etwas weiter. Werde, sobald möglich, auch mal noch ein paar Versuche machen und dir mehr Info liefern.

Gruß
Rudi

Re: Problem mit automatischer Spaltenbreite

Posted: 13.09.2009, 14:50
by rd453
Hier zwei weitere Screenshots. Zuerst wie es ist:
Image
Und hier, wie es sein sollte:
Image
Man sieht:
a) es fehlen höchstens ein paar Pixel zur korrekten Breite
b) das Problem tritt nur dann auf, wenn die Breite einer Zelle breiter als die der Überschrift ist

Zu deinen Fragen:
In der Regel werden die Zellen wie folgt gefüllt, meist ist oTag und oValue identisch (macht eine darüberliegende Methode), manchmal wird oValue vorher manuell in einen String konvertiert. Da bin ich aber noch dran, zu prüfen, ob hier noch ein Bug versteckt ist. Ist aus historischen Gründen etwas unübersichtlich.
public void SetCell(int iRow, int iCol, object oTag, object oValue)
{
GridCell oCell;
...
oCell = Cells[iCol+FixedColCount, iRow+FixedRowCount];
oCell.Tag = oTag;
oCell.Value = oValue;
}

Padding habe ich nicht verändert.

Was mir noch aufgefallen ist:
1.) Wenn ich die Breite einer Zelle (ohne AutoWidth) auf z.B. 19 setze, dann ist die Zelle nachher netto 18 Pixel breit. Wenn man den recten Rand mitrechnet, käme man auf die 19.
2.) Folgendes kommt gar nicht gut:
Cols[iCol].Width = 19;
Cols[iCol].AutoWidth = eWidthType.AutoWidth;
Dies setzt die Zelle seltsamerweise immer auf 19 (18) Breite (also nix isch mit AutoWIdth). Aber:
/* Cols[iCol].Width = 19; */
Cols[iCol].AutoWidth = eWidthType.AutoWidth;
Dies geht, es ist fast richtig (bis auf die hier diskutierte Problematik halt). Ich kann aber im Programm schlecht ausschließen, dass die Spalte zu einem früheren Zeitpunkt schon auf eine feste Breite gesetzt war. Aber wie sollte ich Width dann "rücksetzen"? Geht IMHO doch gar nicht. Oder hast du hier eine Art reservierten Wert (z.B. 0 oder -1).

In wie weit ist die Reihenfolge eigentlich wichtig? So wie ich es (bis jetzt) sehe, sollte es egal sein, ob ich die Zellen zuerst fülle, dann die Spaltenbreite setze oder umgekehrt, denn das Ganze kommt erst beim nächsten Refresh() zu tragen.

Wie wäre es mit dem erwähnten Workaround (also die Angabe einer Anzahl Pixel, die zur Berechnung der Breite einfach hinzuaddiert wird)? Würde mein Problem lösen, weil so kann ich es auf die Dauer nicht lassen.

Viele Grüße
Rudi

Re: Problem mit automatischer Spaltenbreite

Posted: 16.09.2009, 09:56
by torsten
Hallo Rudi
Ich werde das Problem am WE durchackern....
Melde mich dann wieder
Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 21.09.2009, 17:29
by torsten
Hallo Rudi
Muss dich leider um ein paar Tage vertrösten... :-(
Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 05.10.2009, 22:24
by torsten
Hallo Rudi
Habe eine neue Beta unter
http://www.ppsGrid.de/download/ppsGrid_beta.dll versteckt.

Sag' mit bitte Bescheid, ob die AutoWidth-Funktion besser funzt, ok?
Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 05.10.2009, 22:31
by torsten
Nachtrag:
....e gesetzt war. Aber wie sollte ich Width dann "rücksetzen"? Geht IMHO doch gar nicht. Oder hast du hier eine Art reservierten Wert (z.B. 0 oder -1).
Dieses "Problem" bin ich auch "angegangen":
Zrücksetzen braucht man die Breitenberechnung eigentlich nicht, denn wenn sich die Werte in den Zellen ändern, ändern sich auch die Breitenwerte. Das funktionierte auch. Problem war nur das Löschen von Zellen. Die Breitenwerte blieben dabei erhalten. Das habe ich heute korrigiert.
Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 07.10.2009, 16:35
by rd453
Tja, das mit der Spaltenbreite scheint zu gehen, zumindest was ich bis jetzt gesehen habe.

Aber leider gibt es mit der Beta ein Problem, sie führt zu einer NullReferenceException bei Rows.RemoveAt(iRow) wenn iRow 1 ist und eine Headerzeile (Fixed) existiert. Mit der Version 1.3.8 tritt dies nicht auf.

VG
Rudi

Re: Problem mit automatischer Spaltenbreite

Posted: 09.10.2009, 08:34
by torsten
Hallo Rudi
...führt zu einer NullReferenceException bei Rows.RemoveAt(iRow)...
Check ich durch (heute abend oder morgen)
Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 09.10.2009, 19:27
by torsten
Hallo Rudi
Hab' eben versucht, deinen Fehler nachzuvollziehen. Ohne Erfolg.

Dann habe ich den AutoWidth-/AutoHeight-Bereich trotzdem nochmal nachbearbeitet.
Habe eine neue Beta unter http://www.ppsGrid.de/download/ppsGrid_beta.dll versteckt.

Wenn der Fehler mit der neuen Beta noch vorhanden ist, bräuchte ich ein paar mehr Infos.
Meine Versuche (Zeile löschen bei CellClick-Event) jedenfalls blieben ohne Exception.

Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 16.10.2009, 09:49
by rd453
Hallo Torsten,
erstmal vielen Dank für deine Mühe. Habe die Beta seit einigen Tagen schon drin und ausgeliefert, jedoch noch nicht geantwortet. Das mit der Spaltenbreite funktioniert, das Programm hat seither aber manchmal ein, sagen wir, etwas seltsames Verhalten. Möchte dies noch einige Tage beobachten. Melde mich wieder.
Viele Grüße
Rudi

Re: Problem mit automatischer Spaltenbreite

Posted: 19.10.2009, 19:49
by rd453
Hallo Torsten,
also: bei der Beta nach wie vor keine Probleme mehr mit der autom. Spaltenbreite, dafür aber beim Löschen von "weit rechts liegenden" Spalten, nachfolgende Exception auf. Unabhängig davon: Ab und zu scheint das Programm hängenzubleiben, manchmal fängt es sich noch, manchmal nicht, dies trat vor allem beim Kunden auf (der testet derzeit auch mehr), deswegen kann ich hierzu noch nicht mehr sagen.
Hier also die Lösch-Exception:
************** Ausnahmetext **************
System.ArgumentOutOfRangeException: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
Parametername: index
bei System.Collections.CollectionBase.System.Collections.IList.get_Item(Int32 index)
bei ppsGrid.GridRowCellCollection.get_Item(Int32 idx)
bei ppsGrid.GridCellCollection.get_Item(Int32 colIndex, Int32 rowIndex)
bei ppsGrid.Grid.get_Item(Int32 colIndex, Int32 rowIndex)
bei ppsGrid.GridCell.SpanArea()
bei ppsGrid.GridCol.set_Width(Int32 value)
bei ppsGrid.GridCell.AutoWidthItemRemove()
bei ppsGrid.GridCell.AutoSizeRemove()
bei ppsGrid.GridCell.set_Font(Font value)
bei ppsGrid.GridCell.Close()
bei ppsGrid.GridColCollection.OnRemove(Int32 index, Object value)
bei System.Collections.CollectionBase.RemoveAt(Int32 index)
bei Mis.YoPpsGrid.RemoveDataCol(Int32 iCol) in C:\D\Cs\Mis\Source\Controls\YoPpsGrid.cs:Zeile 453.
bei Mis.YoGridEdit.OnBtEntfernen() in C:\D\Cs\Mis\Source\Controls\YoGridEdit.cs:Zeile 855.
bei Mis.YoToolBarItemInfo.oTsb_Click(Object sender, EventArgs e) in C:\D\Cs\Mis\Source\Controls\YoToolBarItemInfo.cs:Zeile 121.
bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
bei System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
bei System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Übrigens: der Index für RemoveAt() ist beim Aufruf gültig, dies habe ich geprüft.
Viele Grüße
Rudi

Re: Problem mit automatischer Spaltenbreite

Posted: 12.11.2009, 14:34
by rd453
Hallo Torsten,
arbeite nach wie vor nicht mit der Beta, da sie Probleme macht. Kann ich beim Kunden nicht einsetzen. Bitte gebe Bescheid, wenn die nächste stabile Version downloadbar ist.
Danke und viele Grüße
Rudi

Re: Problem mit automatischer Spaltenbreite

Posted: 18.01.2010, 09:31
by rd453
Mit der neuesten Beta gibt es (bei mir) keine Probleme.
VG
Rudi

Re: Problem mit automatischer Spaltenbreite

Posted: 18.01.2010, 20:01
by torsten
Hallo Rudi
Mit der neuesten Beta gibt es (bei mir) keine Probleme.
Das hört sich ja gut an. Ich werde (wenn Frauchen und alle anderen ppsGrid-User mitspielen...)
am Wochenende die "neue" Version freigeben; spr.: die Hilfe erweitern und einen letzten Fehler beseitigen.
Gruß Torsten

Re: Problem mit automatischer Spaltenbreite

Posted: 23.01.2010, 19:47
by torsten
Hallo Rudi
Ich habe nochmal die Beta überarbeitet (bzgl. deiner Email).
Wäre schön, wenn du ein Kommentar zu den gefundenen Fehler mailen könntest.
Ansonsten, Gruß und schönes WE, Torsten

PS.: Beta hier: http://www.ppsGrid.de/download/ppsGrid_beta.dll

Re: Problem mit automatischer Spaltenbreite

Posted: 27.01.2010, 17:04
by rd453
Hi Torsten,
vielen Dank für die Beta, habe sie gerade eingebaut. Der von mir in der E-Mail erwähnte Fehler ist bis jetzt nicht mehr aufgetreten. :D
Auch mein Kunde wird sich freuen. :shock:
Melde mich sobald mir was auffällt.
Viele Grüße in den kalten Norden
Rudi