358 messaggi dal 11 luglio 2003
Ciao a tutti,
devo creare una listview(o datagridview, o altro) che mi permetta di ordinare da codice i dati in base ad una determinata colonna. Sapreste suggerirmi la procedura da seguire?
Vb 2008
Ciao

No comment...
438 messaggi dal 04 agosto 2002
Contributi
scusa, non mi ero accorto che postavi in winform.

Ecco l'esempio direttamente da MSDN:http://msdn.microsoft.com/en-us/library/0868ft3z.aspx
358 messaggi dal 11 luglio 2003
Avevo già dato uno sguardo ai link che gentilmente mi avete postato, non riuscendo ad ottenere l'ordinamento da me voluto. Provo con la DataGridView.
Nella Load della form ho popolato la DataGridView con 20 righe:
DataGridView1.Rows.Add(20)
        For i As Integer = 0 To 20
            DataGridView1.Item(0, i).Value = ""

            If CStr(i).Length = 1 Then
                DataGridView1.Item(0, i).Value = "0" & i
            Else
                DataGridView1.Item(0, i).Value = i
            End If
        Next

e nel click di un pulsante ho messo:
Dim newColumn As DataGridViewColumn
        If DataGridView1.Columns.GetColumnCount(DataGridViewElementStates.Selected) = 1 Then
            newColumn = DataGridView1.SelectedColumns(0)
        Else
            newColumn = Nothing
        End If

        Dim oldColumn As DataGridViewColumn = DataGridView1.SortedColumn
        Dim direction As System.ComponentModel.ListSortDirection

        ' If oldColumn is null, then the DataGridView is not currently sorted.
        If oldColumn IsNot Nothing Then

            ' Sort the same column again, reversing the SortOrder.
            If oldColumn Is newColumn AndAlso DataGridView1.SortOrder = _
                SortOrder.Ascending Then
                direction = System.ComponentModel.ListSortDirection.Descending
            Else

                ' Sort a new column and remove the old SortGlyph.
                direction = System.ComponentModel.ListSortDirection.Ascending
                oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None
            End If
        Else
            direction = System.ComponentModel.ListSortDirection.Ascending
        End If


        ' If no column has been selected, display an error dialog  box.
        If newColumn Is Nothing Then
            MessageBox.Show("Select a single column and try again.", _
                "Error: Invalid Selection", MessageBoxButtons.OK, _
                MessageBoxIcon.Error)
        Else
          <b>DataGridView1.Sort(newColumn, direction)</b> 

           If direction = System.ComponentModel.ListSortDirection.Ascending Then
                newColumn.HeaderCell.SortGlyphDirection = SortOrder.Ascending
            Else
                newColumn.HeaderCell.SortGlyphDirection = SortOrder.Descending
            End If
        End If

Solo che mi da errore sulla riga in grassetto: "L'oggetto deve essere di tipo String."
Avete qualche idea?
Ciao e grazie

No comment...
438 messaggi dal 04 agosto 2002
Contributi
prova a impostare il SortMode della colonna a Programmatic.

facci sapere ...

v
358 messaggi dal 11 luglio 2003
Ho già provato ad impostare anche su Programmatic, a voi funziona il codice che ho postato?
Ciao

No comment...
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Il problema è nell'origine dati, quando inserisci le righe. Nel codice che segue:

            If CStr(i).Length = 1 Then
                DataGridView1.Item(0, i).Value = "0" & i
            Else
                DataGridView1.Item(0, i).Value = i
            End If


la colonna si trova a contenere contemporaneamente valori di tipo String (Value = "0" & i) e valori di tipo Int32 (Value = i). Quando il DataGridView1 invoca l'interfaccia di ordinamento provoca un confronto non possibile tra String e Int32.

La soluzione, quindi, consiste nell'utilizzare lo stesso tipo di dati per tutti i record/le righe. Esempio (che sostituisce le righe sopra riportate):

DataGridView1.Item(0, i).Value = String.Format("{0:00}", i)


Ciao.

.:. Marcello Rutter .:.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.