Vill kunna sortera en av kolumnerna på mitt eget sätt, vet inte ens om det går, men jag tror det :) Hej,dataGridView - Egen sortering?
Värde som finns i kolumnen är numeriska
Kan vara allt från 0,001 till 500,000
(engelsk variant, där kommatecken är tusen-avdelare)
förutom nummer kan värdet "N/A" finnas med
Just nu är kolumnen satt till Sortable: Automatic
och som vanligtvis tolkas värdena som en sträng där tex 200 soteras efter talet 154000
jag vill såklart ha dem i storleksordning
Hur ska jag göra?Sv: dataGridView - Egen sortering?
Beroende på om du har knutit din grid till en datakälla eller inte, så finns det två sätt. Utgår från att du inte har gjort det här. I så fall så använder du dig av Sort-metoden med en klass som implementerar IComparer, typ så här:
private class MinKomparator : System.Collections.IComparer
{
SortOrder _order;
public MinKomparator(SortOrder order)
{
_order = order;
}
#region Implementation av IComparer
public int Compare(object x, object y)
{
int CompareValue = 0;
DataGridViewRow rad1 = (DataGridViewRow)x;
DataGridViewRow rad2 = (DataGridViewRow)y;
if (rad1.Cells[0].Value != "N/A" &&
rad2.Cells[0].Value != "N/A")
{
// Vi har nu ett tal
double rad1_varde = (double)rad1.Cells[0].Value;
double rad2_varde = (double)rad2.Cells[0].Value;
if (rad1_varde == rad2_varde)
{
CompareValue = 0;
}
else if (rad1_varde > rad2_varde)
{
CompareValue = 1;
}
else
{
CompareValue = -1;
}
}
// Kolla vilken ordning vi skall sortera i
if (_order == SortOrder.Descending) CompareValue *= -1;
return CompareValue;
}
#endregion
}
Denna lägger du sedan till i din klass där du har din datagrid, och sen anropar du den med
minDataGrid.Sort(new MinKomparator(ord));
Om du har knutit din datagrid till någon sorts data, så måste du sortera dina data i stället för att använda datagriddens sorteringsfunktion.
// Torgrim