Organiser datagrid [Résolu]

Moomoon07 223 Messages postés mercredi 31 mai 2006Date d'inscription 5 mai 2014 Dernière intervention - 19 sept. 2006 à 11:31 - Dernière réponse : Moomoon07 223 Messages postés mercredi 31 mai 2006Date d'inscription 5 mai 2014 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Moomoon07 223 Messages postés mercredi 31 mai 2006Date d'inscription 5 mai 2014 Dernière intervention - 19 sept. 2006 à 13:40
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Moomoon07
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 19 sept. 2006 à 12:55
0
Utile
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.
Commenter la réponse de leprov
Moomoon07 223 Messages postés mercredi 31 mai 2006Date d'inscription 5 mai 2014 Dernière intervention - 19 sept. 2006 à 13:32
0
Utile
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
Commenter la réponse de Moomoon07
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 19 sept. 2006 à 15:04
0
Utile
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;
}
}
Commenter la réponse de leprov
Moomoon07 223 Messages postés mercredi 31 mai 2006Date d'inscription 5 mai 2014 Dernière intervention - 19 sept. 2006 à 16:56
0
Utile
WOUAH

MMN
Commenter la réponse de Moomoon07

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.