2017-08-31 3 views
0

J'ai un problème avec le tri dans la colonne Infragistics.Modifier le type de tri dans la colonne Infragistics

J'ai une colonne avec des nombres (type long), mais le type de données de colonne est une chaîne.

Alors maintenant, il trie par une chaîne qui n'est pas valide. Si je change le type de données de colonne en typeof (long), le tri a cessé de fonctionner. Savez-vous comment changer le type de tri pour les valeurs numériques?

Mise à jour:

myCell.Column.DataType = typeof(string); 

J'utilise Infragistics4.Win.v12.2

+0

C'est étrange. Pouvez-vous montrer comment et quand vous changez le type de données de la colonne? Et dites-nous quelle version d'Infragistics Ultragrid utilisez-vous? – Steve

+0

@Steve J'ai mis à jour mon message. – Cieja

+0

Mais cette colonne est-elle une colonne liée? – Steve

Répondre

0

Vous ne pouvez pas changer la propriété DataType de la colonne si elle est une colonne limitée à une source de données. Au lieu de cela, vous pouvez créer une nouvelle colonne dans la source de données avec un initialiseur d'expression qui vous permet de convertir la colonne String dans une longue colonne. Ensuite, dans la grille, vous pouvez masquer la colonne de chaîne et laisser votre utilisateur voir uniquement la colonne créée avec une expression.

Supposons que vous ayez un DataTable chargé de cette manière

DataTable dt = new DataTable(); 
sqlAdapter.Fill(dt); 

Maintenant, vous pouvez ajouter une nouvelle colonne de type long en utilisant une expression qui copie le contenu de la colonne de chaîne (je suppose que chaque ligne unique est convertible à longue)

dt.Columns.Add("NewLongCol", typeof(long), "StringCol"); 
yourGrid.DataSource = dt; 

Enfin, dans le gestionnaire d'événements de la grille InitializeLayout cacher la colonne de chaîne et placer la colonne longue à sa place

private void yourGrid_InitializeLayout(object sender, InitializeLayoutEventArgs e) 
{ 
    UltraGridBand b = e.Layout.Bands[0]; 
    int pos = b.Columns["StringCol"].Header.VisiblePosition; 
    b.Columns["StringCol"].Hidden = true; 
    b.Columns["NewLongCol"].Header.VisiblePosition = pos; 
}