Organiser datagrid

Résolu
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014 - 19 sept. 2006 à 11:31
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014 - 19 sept. 2006 à 16:56
Salut !

J'ai un datagridview qui contient une liste numérique dans sa première colonne.
Existe t'il une méthode pour le forcer à s'organiser par ordre chronologique ? ou une propriété pour interdire à l'utilisateur d'organiser l'ordre des lignes (en cliquant sur l'entête).
J'ai beau chercher, je trouve pas.

MMN

5 réponses

Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
19 sept. 2006 à 13:40
Cool j'ai réussit : (mon datagrid est datalecteur)



dataLecteurs.Sort(dataLecteurs.Columns[0],




ListSortDirection
.Ascending);



Mais je veux bien le lien d'un msdn offline !

MMN
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
19 sept. 2006 à 12:55
pour forcer l'organisation de ton datagridview, tu as la méthode sort. a toi alors de définir la facon dont le datagridview est trié en créant un objet qui implémente l'interface icomparer. je n'ai jamais utilisé la surcharge de sort avec l'autre signature, mais celle ci est deja largement efficace.
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
19 sept. 2006 à 13:32
Je comprends pas "a toi alors de définir la facon dont le datagridview est trié en créant un objet qui implémente l'interface icomparer".
En plus le msdn lague tellement que j'arrive pas à ouvrir une page ...
Peux tu me donner un exemple : je veux que la première colonne soit toujours organisée comme suit :

0001
0002
0003
0004 ... (chaines de caractères)

Si jamais il existe une version du msdn offline, je veux bien que vous me donniez le lien.
Merci d'avance

MMN
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
19 sept. 2006 à 15:04
pour la msdn offline, faut installer la msdn inclue sur les cd(dvd) de VS2005...

sinon voici le contenu de la page pour faire un sort personnalisé en implémentant l'interface Icomparer (attention, cest gros et mal présenté...)



public virtual void Sort (
IComparer comparer
)



Paramètres
comparer
Implémentation de IComparer qui exécute l'opération de tri personnalisée.

Exceptions
Type d'exception Condition
ArgumentNullException
comparer est référence Null (Nothing en Visual Basic).

InvalidOperationException
VirtualMode a la valeur true.

- ou -

DataSource n'est pas référence Null (Nothing en Visual Basic).


Notes
Cette méthode permet la personnalisation avancée de la fonctionnalité de tri de la classe DataGridView. Afin d'implémenter une opération de tri très personnalisée, vous pouvez écrire un gestionnaire d'événements pour l'événement ColumnHeaderMouseClick et appeler cette méthode avec une instance d'une classe qui implémente l'interface System.Collections.IComparer en tant que paramètre. Dans ce cas, vous affecterez généralement DataGridViewColumnSortMode.Programmatic à la propriété DataGridViewColumn.SortMode pour désactiver le tri automatique et laisser de la place pour un glyphe de tri. Lorsque le tri par colonnes est défini au mode de tri par programme, vous devez afficher le glyphe de tri vous-même en définissant la propriété DataGridViewColumnHeaderCell.SortGlyphDirection.

Cette méthode fonctionne uniquement lorsque la propriété DataSource n'est pas définie. Lorsque vous liez le contrôle DataGridView à une source de données externe, vous devez utiliser les opérations de tri fournies par cette source de données. Lorsque vous fournissez votre propre source de données en implémentant le mode virtuel, vous devez également gérer vous-même les opérations de tri.

L'exemple de code suivant illustre l'utilisation de la surcharge de la méthode Sort dans un scénario de tri sur plusieurs colonnes. Dans cet exemple, l'interface IComparer est implémentée dans la classe RowComparer.

Visual Basic Copier le code
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button1.Click
If RadioButton1.Checked = True Then
DataGridView1.Sort(New RowComparer(SortOrder.Ascending))
ElseIf RadioButton2.Checked = True Then
DataGridView1.Sort(New RowComparer(SortOrder.Descending))
End If
End Sub

Private Class RowComparer
Implements System.Collections.IComparer

Private sortOrderModifier As Integer = 1

Public Sub New(ByVal sortOrder As SortOrder)
If sortOrder = sortOrder.Descending Then
sortOrderModifier = -1
ElseIf sortOrder = sortOrder.Ascending Then

sortOrderModifier = 1
End If
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements System.Collections.IComparer.Compare

Dim DataGridViewRow1 As DataGridViewRow = CType(x, DataGridViewRow)
Dim DataGridViewRow2 As DataGridViewRow = CType(y, DataGridViewRow)

' Try to sort based on the Last Name column.
Dim CompareResult As Integer = System.String.Compare( _
DataGridViewRow1.Cells(1).Value.ToString(), _
DataGridViewRow2.Cells(1).Value.ToString())

' If the Last Names are equal, sort based on the First Name.
If CompareResult = 0 Then
CompareResult = System.String.Compare( _
DataGridViewRow1.Cells(0).Value.ToString(), _
DataGridViewRow2.Cells(0).Value.ToString())
End If
Return CompareResult * sortOrderModifier
End Function
End Class


C# Copier le code
private void Button1_Click( object sender, EventArgs e )
{
if ( RadioButton1.Checked == true )
{
DataGridView1.Sort( new RowComparer( SortOrder.Ascending ) );
}
else if ( RadioButton2.Checked == true )
{
DataGridView1.Sort( new RowComparer( SortOrder.Descending ) );
}
}

private class RowComparer : System.Collections.IComparer
{
private static int sortOrderModifier = 1;

public RowComparer(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Descending)
{
sortOrderModifier = -1;
}
else if (sortOrder == SortOrder.Ascending)
{
sortOrderModifier = 1;
}
}

public int Compare(object x, object y)
{
DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;

// Try to sort based on the Last Name column.
int CompareResult = System.String.Compare(
DataGridViewRow1.Cells[1].Value.ToString(),
DataGridViewRow2.Cells[1].Value.ToString());

// If the Last Names are equal, sort based on the First Name.
if ( CompareResult == 0 )
{
CompareResult = System.String.Compare(
DataGridViewRow1.Cells[0].Value.ToString(),
DataGridViewRow2.Cells[0].Value.ToString());
}
return CompareResult * sortOrderModifier;
}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
19 sept. 2006 à 16:56
WOUAH

MMN
0
Rejoignez-nous