+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

AutoDefineField - Datentyp bleibt Double trotz expliziter Text Angabe


(Thomas Klocker) #1

Hallo @all!

Ich verwende LL17 und C#. Ich überge List & Label eine XML Datei welche anschließend gedruckt wird.
Damit Zahlen nicht als int od. double interpretiert werden, habe ich ein AutoDefineField event hinzugefügt.
In diesem setze ich einfach e.FieldType = LlFieldType.Text;

Trotzdem scheint dies nicht wirklich zu klappen, denn ein XML Datenfeld mit dem Inhalt 7464E28137 wird als double interpretiert und der Ausdruck stürzt mit einer Exception ab, da der Double zu klein für diese Zahl ist.

Wie kann ich dieses Problem denn beheben?

VIelen Dank für eure Hilfe
Gruß

Thomas


(Günther Schwarze) #2

Hallo Thomas,

wenn es nicht geht wird es gehend gemacht >:-).

e.Suppress = true;
(sender as ListLabel).Fields.Add(e.Name, e.Content, LlFieldType.Text);

  • aus dem Kopf, aber so in etwa, ich denke Du siehst an was ich denke… -

G.


(Thomas Klocker) #3

Hallo Günther,

vielen Dank für deine Antwort. Leider funktioniert auch diese Vorgehensweise nicht.
Ich glaube inzwischen auch das der Fehler an einer anderen Stelle liegt, denn ich erhalte folgenden Stack bei der Exception:

Der Wert für ein Double war zu groß oder zu klein.
bei System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
bei System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info)
bei System.Xml.XmlConvert.ToDouble(String s)
bei System.Xml.Schema.XmlUntypedConverter.ToDouble(String value)
bei System.Xml.XPath.XPathNavigator.get_ValueAsDouble()
bei combit.ListLabel17.DataProviders.XmlTableColumn…ctor(XmlDataProvider provider, String tableName, XPathNavigator node)
bei combit.ListLabel17.DataProviders.XmlTableRow.InitColumns()
bei combit.ListLabel17.DataProviders.XmlDataProvider.CheckAddTableAndRelation(String tableName, XPathNavigator parentItem, String navigationId)
bei combit.ListLabel17.DataProviders.XmlDataProvider.BuildDom(XPathNavigator item, XPathNavigator parentItem, String navigationId)
bei combit.ListLabel17.DataProviders.XmlDataProvider.BuildDom(XPathNavigator item, XPathNavigator parentItem, String navigationId)
bei combit.ListLabel17.DataProviders.XmlDataProvider.BuildDom(XPathNavigator item, XPathNavigator parentItem, String navigationId)
bei combit.ListLabel17.DataProviders.XmlDataProvider.Init()
bei combit.ListLabel17.DataProviders.XmlDataProvider.combit.ListLabel17.DataProviders.IDataProvider.get_Tables()
bei combit.ListLabel17.ListLabel.PrintReportFromRelationalDataSource(IDataProvider dataSource, String projectFile, Boolean showFileSelect, LlPrintMode printMode, LlBoxType boxType, IntPtr windowHandle, String dialogTitle, Boolean showPrintOptions, String tempPath)
bei combit.ListLabel17.ListLabel.AutoPrint(LlProject projectType, String projectFile, Boolean showFileSelect, LlPrintMode printMode, LlBoxType boxType, IntPtr windowHandle, String dialogTitle, Boolean showPrintOptions, String tempPath)
bei combit.ListLabel17.ListLabel.Print(Object userData, LlProject projectType, String projectFile, Boolean showFileSelect, LlPrintMode printMode, LlBoxType boxType, IntPtr windowHandle, String dialogTitle, Boolean showPrintOptions, String tempPath)
bei combit.ListLabel17.ListLabel.Print(LlProject projectType, String projectFile, Boolean showFileSelect, LlPrintMode printMode, LlBoxType boxType, String dialogTitle, Boolean showPrintOptions, String tempPath)

Weisst du ob ich den DataProvider irgendwie anpassen kann den ich übergebe?
Ich übergebe nur ein XmlDocument ohne DTD, Schema o.ä.
Aber trotzdem scheint irgendwie der Inhalt als Datentyp umgewandelt zu werden.

Danke für deine Hilfe!

Gruß
Thomas


(Günther Schwarze) #4

Schade, wäre auch zu einfach gewesen…

In der Onlinehilfe der .NET-Komponente steht dazu noch ein bisschen was (direkt auf der Startseite des XmlDataProvider), weiss nicht ob das in LL17 auch schon so ging, die älteste Version die ich noch im Zugriff habe ist 18, daraus zitiert:

Es gibt verschiedene Wege das Datentyp Parsing-Verhalten des Providers zu beeinflussen. Standardmäßig werden alle Nodes durch ihren Inhalt typisiert, z.B. wenn ein Node nur Zahlen enthält wird der resultierende Feldtyp LlFieldType.Numeric sein. Um dieses Verhalten zu überschreiben können Sie das PreParseXPathNavigator Ereignis des Providers verwenden. Ein anderer Weg wäre ein spezialisiertes Attribut, wie unten im XML Beispiel zu sehen, zu verwenden.
<<

Unten im Beispiel dann:

<MainContact lltype="Boolean">1</MainContact>

Über so ein Attribut könntest Du es also mal probieren (vorausgesetzt, LL17 kann das auch schon).