Avatar billede zarya Nybegynder
03. maj 2004 - 15:24 Der er 8 kommentarer

Convertere en Column til decimal

Jeg læser noget data ind i et DataSet fra en XML file og binder det til et DataGrid:
    Dim dvXML As DataView
    sub Page_Load(sender as Object, e as EventArgs)
     
        If not Page.IsPostBack then
            Dim myDataSet as New DataSet()
            myDataSet.ReadXml(Server.MapPath("books.xml"))
            dvXML = New DataView ( myDataSet.Tables(0), _
                                    "", _
                                    "numberOfBooks DESC", _
                                    DataViewRowState.CurrentRows)
            dgBooks.DataSource = dvXML
            dgBooks.DataBind()
        end if
    end sub

Jeg vil så have muligheden for at sortere på de rækker der nu er i min XML file ved hjælp af DataView´et.

    Private Sub sorter(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs)
        Dim dataGrid As DataGrid = source
        Dim strSort = dataGrid.Attributes("SortExpression")
        Dim strASC = dataGrid.Attributes("SortASC")
        Dim myDataSet as New DataSet()
        myDataSet.ReadXml(Server.MapPath("books.xml"))
        dataGrid.Attributes("SortExpression") = e.SortExpression
        dataGrid.Attributes("SortASC") = "Yes"

        If e.SortExpression = strSort Then
            If strASC = "Yes" Then
                dataGrid.Attributes("SortASC") = "No"
            Else
                dataGrid.Attributes("SortASC") = "Yes"
            End If
        End If
        strSort = dataGrid.Attributes("SortExpression")
        dvXML = New DataView (myDataSet.Tables(0))
       
        dvXML.Sort = strSort

        If dataGrid.Attributes("SortASC") = "No" Then
        dvXML.Sort &= " DESC"
        End If
       
        dataGrid.CurrentPageIndex = 0
        dataGrid.DataSource = dvXML
        dataGrid.DataBind()
    End Sub

Nu er det bare sådan at der er nogle tal i nogle af rækkerne og andet data i de andre.
Sorteringen virker fint og XML´en kommer ind uden problemer, borset fra når jeg sortere.
Jeg vil derfor gerne kunne sortere ordenligt når det er tal så at 9999 -> 8888 -> 1000 -> 999 -> 7 og ikke 999 -> 9999 -> 8888 -> 7 -> 1000
osv. fordi at min column er sorteret som en string og ikke som decimal.

Jeg har prøvet: myDataSet.Tables(0).Columns(2).DataType = System.Type.GetType("System.Decimal")

Men jeg kan ikke ændre DataType når der er indlæst data og jeg kan ikke ændre en Table / Column der ikke er oprettet (dvs før jeg har læst XML´en ind)
Avatar billede cyb Nybegynder
06. maj 2004 - 10:11 #1
Prøv at definer et scema der matcher dit dataset, men angiver hvilke kolonner der er int, og læs scemaet ind bagefter du har læst xmldokumentet.
Avatar billede zarya Nybegynder
06. maj 2004 - 10:28 #2
Har du evt. et eksempel på hvordan du ville gøre dette?
Det ville hjælpe mig utroligt meget.
På forhånd tak.
Avatar billede cyb Nybegynder
06. maj 2004 - 11:57 #3
Fra msdn.microsoft.com (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadatasetclassreadxmlschematopic.asp(
Private Sub ReadSchemaFromXmlTextReader()
    ' Create the DataSet to read the schema into.
    Dim thisDataSet As New DataSet()
    ' Set the file path and name. Modify this for your purposes.
    Dim filename As String = "mySchema.xml"
    ' Create a FileStream object with the file path and name.
    Dim myFileStream As New System.IO.FileStream _
      (filename, System.IO.FileMode.Open)
    ' Create a new XmlTextReader object with the FileStream.
    Dim myXmlTextReader As New System.Xml.XmlTextReader(myFileStream)
    ' Read the schema into the DataSet and close the reader.
    thisDataSet.ReadXmlSchema(myXmlTextReader)
    myXmlTextReader.Close()
End Sub
Avatar billede zarya Nybegynder
10. maj 2004 - 12:18 #4
Hvor i vil du så konvertere den ene column til en decimal / integer?

Har søgt lidt rundt på MSDN, men uden held, dog har jeg heller ikke givet det meget tid, da tid er ikke det jeg har mest af :)
Avatar billede cyb Nybegynder
25. maj 2004 - 14:57 #5
Det lyder om sorteringen du får skyldes at datakolonnen er en string, denne vil nemlig sorteres som du beskreiver, men hvis kolonnen er decimal eller integer vil sorteringen ske korrekt.
Avatar billede zarya Nybegynder
31. maj 2004 - 12:45 #6
Det er jo lige det, men når jeg henter XML´en bliver alt convereteret til string
Avatar billede cyb Nybegynder
04. juni 2004 - 09:18 #7
Også selvom du har indlæst et skema først?
Avatar billede zarya Nybegynder
21. juni 2004 - 09:54 #8
Har jeg ikke haft tid til rigtigt at sætte mig ind i datascema´s...

Og derfor ved jeg ikke om det virker...
Du har ikke mulighed for at opsætte et simpelt scema hvor der er 2 char og 1 decimal værdi?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis