Hej! Hmm, jag misstänker att om man korrekt läser in en schema-fil, .XSD, så kanske C# kan tolka rätt. Schemat är antagligen inte "Dataset-kompatibelt". Kanske convert(int, TIME) ASC kan hjälpa dig Hej igen!C# DataTable Select : Sortera/order by int men den tolkar som sträng
Jag har ett problem i C#.
Jag har läst in en XML-fil som jag lagrar i ett DataSet. Sedan tar jag ut en DataTable.
I denna DataTable vill jag ta ut ett antal Row:s sorterade efter "TIME".
Problemet är att Select-satsen sorterar på TIME som en sträng vilket medför att t ex
1000000000 = 1 sek
10000000000 = 10 sek
2000000000 = 2 sek
Alltså, att 10 sekunder sorteras in FÖRE 2 sekunder. Irriterande. jag vet dock inte hur man får den att tolka talet som en long eller så...
Tips/ideér?
<code>
DataRow[] d = SourceTable.Select("", "time ASC");
</code>Sv: C# DataTable Select : Sortera/order by int men den tolkar som sträng
Men då kommer det andra problemet - såfort jag läser in min schema-fil så får jag inte ut några värden. Endast DataTables kommer ut.
Såhär:
<code>
dataSet = new DataSet();
dataSet.ReadXmlSchema("SimulationData.xsd");
dataSet.ReadXml("SimulationData.xml");
</code>
I ovanstående kommer jag inte få ut ett skvatt, förutom just tomma tabeller.
Här kommer både XML-fil och schema-fil.
Hoppas att någon kan se några fel?
-----------
XML-FILEN
<code>
<?xml version="1.0" encoding="utf-8"?>
<SIMULATION_ROOT xmlns="SimulationData.xsd">
<SIMULATION_SETTINGS>
<BOTTOM_LEFT_LAT>42.36134</BOTTOM_LEFT_LAT>
<BOTTOM_LEFT_LON>-71.0587</BOTTOM_LEFT_LON>
<TOP_RIGHT_LAT>42.36808</TOP_RIGHT_LAT>
<TOP_RIGHT_LON>-71.05024</TOP_RIGHT_LON>
<IMAGE_PATH>C:\Documents and Settings\ted\Mina dokument\Visual Studio 2005\Projects\STRAW Visualizer\STRAW Visualizer\bin\Debug\suffolk24.png</IMAGE_PATH>
</SIMULATION_SETTINGS>
<SIMULATION_EVENTS>
<CAR_NEW_POSITION>1</CAR_NEW_POSITION>
<PACKET_EVENT>2</PACKET_EVENT>
</SIMULATION_EVENTS>
<CARS>
<CAR id="1">
</CAR>
<CAR id="2">
</CAR>
</CARS>
<EVENTS>
<EVENT>
<TIME>0</TIME>
<NODE_ID>1</NODE_ID>
<EVENT_TYPE>1</EVENT_TYPE>
<NEW_POSITION_X>535.4985</NEW_POSITION_X>
<NEW_POSITION_Y>271.46783</NEW_POSITION_Y>
</EVENT>
<EVENT>
<TIME>0</TIME>
<NODE_ID>2</NODE_ID>
<EVENT_TYPE>1</EVENT_TYPE>
<NEW_POSITION_X>356.25726</NEW_POSITION_X>
<NEW_POSITION_Y>49.171177</NEW_POSITION_Y>
</EVENT>
<EVENT>
<TIME>1000000000</TIME>
<NODE_ID>1</NODE_ID>
<EVENT_TYPE>1</EVENT_TYPE>
<NEW_POSITION_X>535.4985</NEW_POSITION_X>
<NEW_POSITION_Y>271.46783</NEW_POSITION_Y>
</EVENT>
<EVENT>
<TIME>1000000000</TIME>
<NODE_ID>2</NODE_ID>
<EVENT_TYPE>1</EVENT_TYPE>
<NEW_POSITION_X>356.25726</NEW_POSITION_X>
<NEW_POSITION_Y>49.171177</NEW_POSITION_Y>
</EVENT>
</EVENTS>
</SIMULATION_ROOT>
</code>
SCHEMA-FILEN:
<code>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="SIMULATION_ROOT" targetNamespace="http://tempuri.org/SimulationData.xsd" xmlns:mstns="http://tempuri.org/SimulationData.xsd" xmlns="http://tempuri.org/SimulationData.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="SIMULATION_ROOT">
<xs:complexType>
<xs:sequence>
<xs:element name="SIMULATION_SETTINGS">
<xs:complexType>
<xs:sequence>
<xs:element name="BOTTOM_LEFT_LAT" type="xs:float" />
<xs:element name="BOTTOM_LEFT_LON" type="xs:float" />
<xs:element name="TOP_RIGHT_LAT" type="xs:float" />
<xs:element name="TOP_RIGHT_LON" type="xs:float" />
<xs:element name="IMAGE_PATH" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SIMULATION_EVENTS">
<xs:complexType>
<xs:sequence>
<xs:element name="CAR_NEW_POSITION" type="xs:int" />
<xs:element name="PACKET_EVENT" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CARS">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="CAR">
<xs:complexType>
<xs:sequence>
<xs:element name="START_POSITION_X" type="xs:float" />
<xs:element name="START_POSITION_Y" type="xs:float" />
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="EVENTS">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="EVENT">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="TIME" type="xs:unsignedLong" />
<xs:element name="NODE_ID" type="xs:int" />
<xs:element name="EVENT_TYPE" type="xs:int" />
<xs:element name="NEW_POSITION_X" type="xs:float" />
<xs:element name="NEW_POSITION_Y" type="xs:float" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</code>
Hjälp! =)Sv: C# DataTable Select : Sortera/order by int men den tolkar som sträng
Se till att du har ett korrekt genererat Dataset från Dataset Designern först.
Alltså ett typat Dataset med lämpliga numeriska Datatyper.
Eventuellt behöver du transformera om XML-filen så att den passar Dataset strukturen
som i princip är
<DataSetRoot>
<Table1>
<Field1 />
<Field2 />
</Table1>
</DataSetRoot>
En fullösning som kanske funkar är att anropa convert function i din Select..
"Convert(time, 'System.Int32') ASC"Sv:C# DataTable Select : Sortera/order by int men den tolkar som sträng
Sv: C# DataTable Select : Sortera/order by int men den tolkar som sträng
Det löste sig genom att jag dels fibblade runt med schemat (XSD) så den lästes in korrekt. Vet inte riktigt varför den inte gjorde det från början.
Alltså, sorteringen löste sig om schemat användes korrekt, där jag hade specificerat vad de olika kolumnerna är för datatyper. Kan itne säga exakt vad som gjordes för att få XSDn att läsas inte korrekt. Hatar när man inte vet varför ett problem löste sig =)
Tack!